2017-09-14 88 views
0

我對TensorFlow非常陌生並試圖學習它。我從教程網站複製了一個程序。當我修改它時,程序存在問題,我必須進行調試。我正在尋找幫助,以瞭解如何打印某些值,例如成本和優化程序。我必須弄清楚在每次迭代中更新的值。據我所知,筆記無法打印,但我承擔了這些成本,優化器是應該打印的輸入,對嗎?Tensorflow調試或打印語句

plt.ion() 
n_observations = 100 
xs = np.linspace(-3, 3, n_observations) 
ys = np.sin(xs) + np.random.uniform(-0.5, 0.5, n_observations) 

X = tf.placeholder(tf.float32) 

Y = tf.placeholder(tf.float32) 

Y_pred = tf.Variable(tf.random_normal([1]), name='bias') 
for pow_i in range(1, 5): 

    W = tf.Variable(tf.random_normal([1]), name='weight_%d' % pow_i) 
    Y_pred = tf.add(tf.multiply(tf.pow(X, pow_i), W), Y_pred) 

cost = tf.reduce_sum(tf.pow(Y_pred - Y, 2))/(n_observations - 1) 
d = tf.Print(cost, [cost, 2.0], message="Value of cost id:") 

learning_rate = 0.01 
optimizer = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost) 

n_epochs = 10 
with tf.Session() as sess: 

    sess.run(tf.global_variables_initializer()) 
    prev_training_cost = 0.0 
    for epoch_i in range(n_epochs): 


    for (x, y) in zip(xs, ys): 
    print("Msg2 x, y ", x, y, cost); 
    sess.run(optimizer, feed_dict={X: x, Y: y}) 
    sess.run(d) 
    print("Msg3 x, y ttt ", x, y, optimizer); 

     training_cost = sess.run(
      cost, feed_dict={X: xs, Y: ys}) 
     print(training_cost) 
     print("Msg3 cost, xs ys", cost, xs, ys); 

     if epoch_i % 100 == 0: 
      ax.plot(xs, Y_pred.eval(
       feed_dict={X: xs}, session=sess), 
       'k', alpha=epoch_i/n_epochs) 
     fig.show() 
     #plt.draw() 
    # Allow the training to quit if we've reached a minimum 
    if np.abs(prev_training_cost - training_cost) < 0.001: 
     break 
    prev_training_cost = training_cost 

ax.set_ylim([-3, 3]) 
fig.show() 
plt.waitforbuttonpress() 

回答

0

在您的例子,costoptimizer指張量在圖中,不輸入到您的曲線圖。需要在session.run調用中獲取以便能夠打印它們的python值。例如,在您的示例中,打印training_cost應該打印成本。同樣,如果您從session.run(optimizer, ...)返回optimizer的值,它應該返回正確的可打印值。

如果你有興趣在調試和打印值檢查:

希望幫助!