我正在尝试一些自动编码器,并使用tensorflow创建了一个试图重建MNIST数据集的模型。
我的网络非常简单:X,e1,e2,d1,Y,其中e1和e2是编码层,d2和Y是解码层(Y是重构的输出)。
X具有784个单位,e1具有100个单位,e2具有50个单位,d1具有100个单位,Y具有784个单位。
我将S型曲线用作层e1,e2,d1和Y的激活函数。输入在[0,1]中,因此应该是输出。
好吧,我尝试使用交叉熵作为损失函数,但输出始终是斑点,并且我注意到从X到e1的权重始终会收敛到零值矩阵。
另一方面,将均方误差用作损失函数,会产生不错的结果,我现在可以重构输入。
为什么呢?我以为我可以将这些值解释为概率,因此可以使用交叉熵,但是显然我做错了。
1
您提到在第一层中使用sigmoid作为激活功能。那些表现出“饱和”,如CS231n注释中所述。您是否尝试过其他激活功能(如ReLU)?
—
杰里(Jerry)
如果尝试其他操作,我现在不记得了,但是感谢您的分享!
—
AkiRoss