我正在研究一种递归自动编码器。神经网络采用两个2D图像,每个图像形状(28,28,1)并组合以创建(28,28,2)的输入。它们被编码成(28,28,1)形状,并被解码回原始形状(28,28,2)。因此,编码形式的数据可以输入自动编码器进行递归操作。
我们可以假设通道1是新图像,通道2是先前编码的数据。如何创建一个损失函数,对于重构通道2的错误(因为这将携带以前编码的数据)更严重地惩罚?
我在Keras工作,有一个Tensorflow后端。
或者,有没有办法将网络作为一个完整的树进行训练,而不是只对单个两个输入进行训练 - 一次两个输出块?
答案 0 :(得分:2)
您可以将已解码的(28,28,2)重新分成2个图像作为输出,并使用loss_weights
指定重要性权重。来自documentation:
model.compile(optimizer='rmsprop', loss='binary_crossentropy',
loss_weights=[1., 0.2])
是的,Keras中的所有模型都像图层一样,因此您可以将它们链接在一起构建一个树。然后,您可以一次性训练网络,并决定是否要分享权重等。但是,训练可能更困难。我建议使用功能API来创建这些更复杂的结构,以便您有更多的控制权。