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