Siamese network:禁用共享变量渐变反向传播

时间:2017-04-10 10:39:50

标签: matlab python-2.7 tensorflow conv-neural-network

我目前正致力于将本文的暹罗网络移植:Fully-Convolutional Siamese Networks for Object Tracking从matlab到tensorflow代码。我遇到了80k到150k步后内核变为NaN的问题,并且已经尝试了一些防止具有梯度削波的纳米并防止零损失的方法,但我仍然遇到了一些问题。

我怀疑的一个问题是反向传播,我试图实现的暹罗网络是独特的,它使用网络输出的一侧作为另一方的卷积“过滤器”。我用一些变量重塑和深度卷积实现了这个。

由于网络的两侧在变量范围内使用reuse = true共享相同的权重,我认为有两个渐变反向传播到一个变量的问题,如屏幕截图所示。Gradient descent calculation. < / p>

我想要尝试的是仅反向传播渐变的一侧以更新变量,但仍然让两方共享相同的变量。从本质上讲,只要第一个变量发生变化,就会更新第一个变量,但是将copy变量设置为trainable = False。

1 个答案:

答案 0 :(得分:0)

我可以使用以下代码禁用渐变反向传播:

second_siamese_no_backprop = tf.stop_gradient(second_siamese_output_layer)

我还无法验证这是否解决了NaN问题。