2017-09-01 7 views
0

私は同じ入力に対して反復畳み込みをしようとすると、勾配が1回の以上の繰り返しのためにゼロになります。ここで何がうまくいかないでしょうか?反復畳み込みテンソルのためのゼログラジエント?

W = tf.Variable(tf.zeros([3, 3, 1, 1])) 
output = input_image # a 4D tensor [batch_size, 16, 16, 1] 
for _ in range(4): 
    output = tf.nn.conv2d(
     output, 
     W, 
     [1, 2, 2, 1], 
     padding="SAME" 
    ) 

preds = tf.reshape(output, shape=[batch_size]) 

loss = tf.reduce_mean(preds, labels) 

# this gradient zero when num of repetitive layers > 1?? 
tf_gradient = tf.concat(0, tf.gradients(loss, W)) 
gradient = session.run(tf_gradient) 

print(gradient.reshape(3**2)) 
#prints [ 0. 0. 0. 0. 0. 0. 0. 0. 0.] 

答えて

0

Wのランダム初期化を使用してください。 W = tf.get_variable(name="W", initializer=tf.glorot_uniform_initializer, shape=[3, 3, 1, 1], dtype=tf.float32)

+0

のようなものは、それは私が見 –

+0

タイプミスでした、編集を参照してください。あなたは 'W'のためのランダムな初期化を試みることができますか? 'W = tf.get_variableのようなもの(名前= "W"、初期化子= tf.glorot_uniform_initializer、形状= [3、3、1、1]、DTYPE = tf.float32)' – GeertH

+0

感謝!私はランダムなinitsで動作します、あなたはこのコメントであなたの答えを編集しますか?私は答えを受け入れることができます。 –

関連する問題