2017-04-25 16 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가 None을 반환하는 이유는 무엇입니까?

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

I 인쇄 문을 추가 시도하고 내가 prob_을 볼 수 있고 잘 나오지 log_하지만 위의 문제를 일으키는 tf.gradients에서 무슨 일이 일어나고 있는지 모르겠어요.

model.weights는 기본적으로 내가 사용하고있는 모델의 가중치입니다.

답변

0

prob_placeholdermodel.weights에 대한 명시 적 의존성이 없습니다. 즉, 사용자가 정의한대로 기능적으로 의존하지 않습니다.

기술적으로 그래디언트는 0이어야하지만 technical reasons in TensorFlow으로 인해 None으로 계산됩니다.

+0

굉장! 한 가지 방법은 model.output이 prob_placeholder가되도록 만드는 것입니다. 그 방법 prob_placeholder는 간접적으로 model.weights와 관련이 있습니까? – user49593

+0

@ user162264 일반적인 방법은 출력 레이블을'tf.placeholder'에 보관하고 진정한 레이블과 NN의 출력을 취하여 값을 계산하는 손실 함수를 계산하는 것입니다. 그러면 손실 w의 기울기를 계산할 수 있습니다. 모델 변수. –

관련 문제