为什么我在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

使用xx_hatyL是2D阵列炬管张量。

我对所有批次数据集进行了训练,这意味着batch_size = len(Adjancency_matrix) = len(A)

那么,您能在我的代码中看到损失函数为何为的原因吗?

谢谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)