使用 keras tensorflow 实现共享卷积层

Implement shared convolutional layers with keras tensorflow

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

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

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

首先,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