【问题标题】:Implement shared convolutional layers with keras tensorflow使用 keras tensorflow 实现共享卷积层
【发布时间】:2024-05-18 20:40:02
【问题描述】:

我有一个网络,其中有一个类似unet 的结构。我想让卷积层在两个输入之间共享。我的代码示例:

conv_layer = Conv(parameters)
out1 = con_layer(input1)
out2 = con_layer(input2)

这部分是否会创建两个输出,每个输出仅取决于对应的输入和共享的权重?还是连接输入并从卷积传递它们?这一层的两次调用中的权重是否相同? 还有一个关于学习的问题。当涉及到反向传播时,损失是否从共享层传播一次?学习有什么变化吗?

【问题讨论】:

    标签: python tensorflow keras shared


    【解决方案1】:

    首先,U-Net 没有任何共享层。它使用跳过连接和串联来重用功能。

    共享层看起来像这样

    x --> F(x)
              ==> G(F(x),F(y))
    y --> F(y) 
    

    这部分是否会创建两个输出,每个输出仅取决于对应的输入和共享权重?

    • 是的,两个输入的共享权重是固定的,输出取决于每个输入。

    它是否连接输入并从卷积中传递它们?

    • 不,它不执行任何连接。甚至两个输入也是完全独立的,不直接交互——它们只通过 conv_layer。

    权重是否相同?

    • 是的,共享层的权重完全一样。

    当涉及到反向传播时,损失是否从共享层传播一次?学习有什么变化吗?

    • 不确定您的意思是什么,但两个输入的权重会同时更新。如果通过学习的变化你的意思是相对于非共享层,是的。

    一些有用的阅读:http://neural.vision/blog/deep-learning/backpropagation-with-shared-weights/

    https://datascience.stackexchange.com/questions/26755/cnn-how-does-backpropagation-with-weight-sharing-work-exactly

    https://datascience.stackexchange.com/questions/27506/back-propagation-in-cnn

    【讨论】:

    • 关于最后一个问题。是否有任何参考资料指出 keras 如何在反向传播和权重校正中使用多个输出和损失?我有一个共享部件,然后有两个不共享部件用于多任务。 loss = weight1*loss1 + weight2*loss2 如何影响两个共享部分和公共部分的权重校正? loss1是否只用于更新shared part1和common的权重?