2017-04-25 17 views
1
# Defining the tf ops 
prob_placeholder = tf.placeholder(tf.float32, shape=(2)) 
log_placeholder = tf.log(prob_placeholder) 
grads_placeholder = tf.gradients(ys=tf.log(prob_placeholder), xs=model.weights) 


# t is some index into the holders (which are lists) 
# s is some state || p_a is some list of [p_1, 1 - p_1] || a_ is either 0 or 1 || r is 1 

prob_ = tf_sess.run(prob_placeholder, {prob_placeholder: p_a}) 
log_ = tf_sess.run(log_placeholder, {prob_placeholder: prob_}) 
print(prob_, log_) 
grads_ = tf_sess.run(grads_placeholder, {prob_placeholder: prob_}) 

基本的に私はなぜそれが返されているのかわかりません。私のtf_gradientsが返されないのはなぜですか?

TypeError: Fetch argument None has invalid type <type 'NoneType'> 

私はprint文を追加しようとしたと私はprob_を見ることができますし、うまく出てくるLOG_が、私は上記の問題を引き起こしているtf.gradientsで何が起こっているかわかりません。

model.weightは基本的に私が使用しているモデルの重みです。

答えて

0

prob_placeholderは、model.weightsに明示的な依存関係はありません。つまり、定義した方法によっては機能的に依存しません。

したがって、技術的には勾配はゼロでなければなりませんが、technical reasons in TensorFlowのためにNoneと計算されます。

+0

恐ろしい!それで、1つの方法は、model.outputがprob_placeholderになるようにすることでしょうか?そうすればprob_placeholderは間接的にmodel.weightsに関係しますか? – user49593

+0

@ user162264通常の方法は、出力ラベルを 'tf.placeholder'に保ち、真のラベルとNNの出力をとり、値を計算する損失関数を計算することです。次に、損失wの勾配を計算することができます。モデル変数。 –

関連する問題