【问题标题】:How to create a channel sensitive loss function?如何创建通道敏感损失函数?
【发布时间】:2018-10-22 04:22:17
【问题描述】:

我正在研究递归自动编码器。神经网络采用两个 2D 图像,每个图像的形状为 (28,28,1),并组合以创建 (28,28,2) 的输入。它们被编码为 (28,28,1) 形状,并被解码回原始形状 (28,28,2)。因此,可以将编码形式的数据送入自动编码器进行递归操作。

我们可以假设通道 1 是新图像,通道 2 是之前编码的数据。如何创建一个损失函数,对重建通道 2 的错误进行更严重的惩罚(因为这将携带以前编码的数据)?

我在 Keras 工作,使用 Tensorflow 后端。

或者,有没有办法将网络训练为一棵完整的树,而不是只针对单个两个输入 - 一次两个输出块?

【问题讨论】:

    标签: python recursion tensorflow keras autoencoder


    【解决方案1】:

    您可以将解码后的 (28, 28, 2) 分成 2 张图像作为输出,并使用 loss_weights 分配重要性权重。来自documentation

    model.compile(optimizer='rmsprop', loss='binary_crossentropy',
                  loss_weights=[1., 0.2])
    

    是的,Keras 中的所有模型都类似于层,因此您可以将它们链接在一起以构建一棵树。然后您可以一次性训练网络并决定是否要共享权重等。但是,训练可能会更加困难。我建议使用函数式 API 来创建这些更复杂的结构,以便您拥有更多控制权。

    【讨论】:

    • loss_weights 需要多个输出“张量”,事实并非如此。该问题使用多个“渠道”。
    • 您应该在fit 方法中使用class_weight
    • @DanielMöller 该模型是作为自动编码器构建的,我看不出 class_weight 有什么帮助,因为它不训练类(?)
    • 频道将被视为类。
    • 感谢您的帮助,我阅读了有关权重的信息,但不确定如何将其应用于问题。我已经将网络重写为具有拆分输入和输出的功能模型,因此现在应该容易得多。
    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 2015-09-25
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-29
    相关资源
    最近更新 更多