2017-04-10 29 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的問題。