问题描述 投票:0回答:0
模型效果很好,重建是正确的,但是对我来说似乎很奇怪:logVar层的输出张量仅包含零。

i在平均 / logVar /样品层中使用或多或少单位(从2到20)尝试过。 我试图更改kl_weight参数(这使KL损失与重建损失相比)。我什至尝试使用0的kl_weight(这意味着KL损耗被完全忽略,并且模型仅由于重建损失MSE而变化)。 无论如何,logvar层的输出仅包括零(注意:在训练开始时,都有不同的值,但是经过几个步骤训练,只有零保留在输出中)。

然而,平均层输出各种值,我注意到当kl_weight> 0时,它们比kl_weight == 0时要小,因此KL损耗函数似乎在起作用。
这应该是正常的吗?也许在logvar层中的输出高于零的输出不会像该任务一样简单地改善重建吗?

您是否在logVar输出中遇到了这样的全零输出?如果没有,您那里有什么价值?您是否知道可能导致问题的原因?
    

这是由于编码器输出中的

relu

激活所致。要了解为什么这是一个问题 - KL-Divergence损失将方差输出提高到1。同时,重建损失通常将其拉到0,因为较小的差异使代码更可靠,从而导致更好的重建。 thus,可以预期的方差在0到1之间。对应于0(等于1)或以下的对数方差(小于1->负log方差)。但是,对于

relu

输出,对于数字差异,您的值无法获得小于0的值,并且恰好的值是模型可以做的最好的值。

相似,因为手段也没有真正的意义,因为没有理由为什么平均值不应该为负。

machine-learning deep-learning loss-function tensorflow.js autoencoder
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.