

現在deep learningを学習中の者で、pythonのtensorflowを使用しています。

tensorflowのウリとしては、optimizerにlossを渡せば勝手に最適化してくれることですが、その最適化途中のwの値や勾配の値を、見たり取り出したりすることはできないでしょうか？

また、一般的な最適化は重みの勾配さえわかれば問題ないのですが、私はlossに対する入力の勾配を求めたいと思っています。optimizerではおそらく求めてくれないので、gradients()関数を使用すればなんとかなりそうだとは思うのですがイマイチ理解できず困っています。

よろしくお願いします。


CC BY-SA 3.0
2016-07-21T03:56:09.223
27784
2017-05-03T08:43:58.350
17243
question
深層学習 tensorflow
tensorflowの勾配の値を取り出したい

[code]

    optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
    grad, var = optimizer.compute_gradients(cost)
    train_op = optimizer.apply_gradients([grad, var])
    
[/code]

のようにすると grad として勾配を取り出すことができます。


CC BY-SA 3.0
2017-01-18T13:35:49.830
31951
2017-01-18T13:42:45.743
2017-01-18T13:42:45.743
19011
19011
27784
answer

[code]

    params = tf.trainable_variables()
    gradients = tf.gradients(loss, params)
    tf.AdamOptimzer(0.1).apply_gradients(zip(gradients, params), global_step)
    
[/code]

こんな感じで勾配を求めた上で、最適化することができます。  
weigthとかbiasを見たい場合は

[code]

    w = tf.get_variable("weight", [input_dim, output_dim], tf.float32)
    b = tf.get_variable("bias", [output_dim], tf.float32)
    print session.run([w, b])
    
[/code]

のようにすればweightやbiasの値を見ることができます。


CC BY-SA 3.0
2017-03-25T15:36:44.420
33532
2017-03-25T15:36:44.420
20856
27784
answer