我正在阅读Tensorflow文档。在下面的代码中,我刚刚更改了最后一行。我在迭代中推送了最后一行,看看究竟发生了什么......
import tensorflow as tf
# linear_model = W*x+B
W = tf.Variable(.3, dtype=tf.float32)
B = tf.Variable(-3., dtype=tf.float32)
x = tf.placeholder(dtype=tf.float32) #data_X
linear_model = W*x+B
y = tf.placeholder(dtype=tf.float32) #data_Y
loss = tf.reduce_sum(tf.square(linear_model-y))
optimizer = tf.train.GradientDescentOptimizer(0.01)
train = optimizer.minimize(loss)
X_train = [1.0,2.0,3.0,4.0] #data_X
y_train = [0.0,-1.0,-2.0,-3.0] #data_y
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
for i in range(1000):
sess.run(train,{x:X_train, y:y_train})
print(sess.run([W,B,loss], {x:X_train, y:y_train}))
请检查最后一行:print(sess.run([W,B,loss], {x:X_train, y:y_train}))
为什么我需要包含
{x:X_train, y:y_train}
为了打印声明?如果从最后一行中排除此项,则会出错。这没有任何意义,因为损失已经在之前计算过了。感谢
答案 0 :(得分:2)
如果您打印loss
,您会发现它是张量,而不是变量。这是因为TensorFlow定义了一个计算图,然后在调用sess.run
时执行它,它不像python那样执行顺序执行。
您可以将loss
视为x和y的函数,以了解sess.run
正在做什么。
execute loss() # not enough information to calculate loss
execute loss(x, y) # this will run loss
答案 1 :(得分:1)
之前的行可能是在getSuggestions
操作中内部计算损失,但它没有输出任何内容。因此,您的print语句需要首先计算您需要传递train
的值。您可以通过将最后两行更改为:
feed_dict
上面的第一行实际上明确执行_, W_val, B_val, loss_val = sess.run([train, W, B, loss], {x: X_train, y:y_train}) # run ops all at once, storing desired results
print(W_val, B_val, loss_val) # do whatever you want with stored results
,W
和B
操作,并将其值保存到loss
,W_val
和{{ 1}}。你可以用那些保存的值做任何你想做的事。