为什么我的变分自动编码器只产生正值

  • 本文关键字:编码器 pytorch autoencoder
  • 更新时间 :
  • 英文 :


我复制了这个例子来构建一个变分自动编码器(VAE(。该示例使用图像,但我将其用于包含负值的信号。经过训练后,自动编码器只重建信号的正部分,不会产生负值。有人能发现问题所在或解释为什么会出现这种情况吗?

如果您使用的代码与您放入链接的示例中所示的代码完全相同,则在解码器的末尾有x = torch.sigmoid(self.decConv2(x)),它采用实数行并输出[0,1]之间的数字。这就是网络无法输出负数的原因。如果您想更改模型以输出负数,请删除sigmoid函数。

当然,这意味着您还必须更改用于训练模型的损失函数,因为BCE损失只适用于[0,1]范围内的输出。

作为建议我建议任何人使用具有logits损失的BCE,并避免在解码器中使用sigmoid,因为这种方法以更稳定的方式结合了sigmoid和BCE损失。

相关内容

  • 没有找到相关文章

最新更新