如何解决为什么我在PyTorch中自动编码器的损失值是负数?
我正在尝试实现SDNE,该算法使用深度自动编码器将图形映射到潜在表示形式d
的维度。
这个想法很简单,SDNE使用邻接矩阵作为输入和输出的嵌入层(也就是图的节点嵌入)。
当我在PyTorch中实现代码时,尽管损失函数不是负值,但我却得到了负损失值。
这是我的代码:
def _compute_loss(self,x,x_hat,y,L):
def loss_1st(Y,L):
Y_ = torch.matmul(torch.transpose(Y,1),L)
return 2 * torch.trace(torch.matmul(Y_,Y))
def loss_2nd(X_hat,X,beta):
B = torch.ones_like(X).to(device)
B[X != 0] = beta
return torch.sum(torch.square((X_hat - X) * B))
batch_size = x.shape[0]
# TODO: check if divide batch_size
loss_1 = loss_1st(y,L)
loss_2 = loss_2nd(x_hat,self.beta)
loss = loss_2 + self.alpha * loss_1
return loss
使用x
,x_hat
,y
,L
是2D阵列炬管张量。
我对所有批次数据集进行了训练,这意味着batch_size = len(Adjancency_matrix) = len(A)
。
那么,您能在我的代码中看到损失函数为何为负的原因吗?
谢谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。