【问题标题】:Siamese network: disable shared variable gradient back propagation连体网络:禁用共享变量梯度反向传播
【发布时间】:2017-04-10 10:39:50
【问题描述】:

我目前正在将本文的连体网络:Fully-Convolutional Siamese Networks for Object Tracking 从 matlab 移植到 tensorflow 代码。我遇到了内核在 80k 到 150k 步后变成 NaN 的问题,并且已经尝试了一些通过梯度裁剪来防止 nan 并防止零损失的方法,但我仍然遇到一些问题。

我怀疑的一件事是反向传播,我试图实现的孪生网络是独一无二的,它使用网络输出的一侧作为另一侧的卷积“过滤器”。我已经通过一些可变的重塑和深度卷积实现了这一点。

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

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

【问题讨论】:

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


    【解决方案1】:

    我能够使用以下代码禁用梯度反向传播:

    second_siamese_no_backprop = tf.stop_gradient(second_siamese_output_layer)
    

    我还不能验证这是否解决了 NaN 问题。

    【讨论】:

      猜你喜欢
      • 2020-07-01
      • 1970-01-01
      • 2011-02-21
      • 1970-01-01
      • 1970-01-01
      • 2020-01-07
      • 1970-01-01
      • 2019-04-16
      • 2016-10-31
      相关资源
      最近更新 更多