2017-04-10 72 views
0

我目前正在移植本文的暹罗网络:Fully-Convolutional Siamese Networks for Object Tracking从matlab到tensorflow代码。我在80k到150k步之后出现内核变成NaN的问题,并且已经尝试了一些防止梯度削减和防止零丢失的方法,但是我仍然有一些问题。连体网络:禁用共享变量梯度反传

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

由于网络的两侧在变量范围内使用reuse = true共享相同的权重,所以我认为在屏幕截图中可以看到2梯度传回一个变量时出现问题。 Gradient descent calculation.

我想尝试的是只返回传播渐变的一侧用于更新变量,但仍然有两侧共享相同的变量。从本质上讲,当第一个变量发生变化时,首先创建第一个变量的副本,但将副本变量设置为trainable = False。

回答

0

我能够禁止使用此代码梯度回传播史:

second_siamese_no_backprop = tf.stop_gradient(second_siamese_output_layer) 

我现在还无法验证,如果这固定NaN的问题。