今天读代码的时候,看到有个eval函数,仔细琢磨了一下,还挺有意思的,其实它就是启动计算图的一种方式,上例程:
#2021.10.14 HIT ATCI LZH
#TensorFlow中的eval函数
import tensorflow as tf
#为训练数据申明Tensorflow占位符
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
#创建Tensorflow的权重和偏置且初始值设为0
w = tf.Variable(1.5)
b = tf.Variable(3.0)
#定义用于预测的线性回归模型
Y_hat = X*w + b
#定义损失函数
loss = tf.square(Y - Y_hat, name='loss')
#申明初始化操作符
init_op = tf.global_variables_initializer()
with tf.Session() as sess:
sess.run(init_op)
print('sess.run(loss, feed_dict = {X: 4., Y: 6.}) = ',sess.run(loss, feed_dict = {X: 4., Y: 6.}))#loss = (4*1.5+3-6)^2 = 9
print('loss.eval({X: 4., Y: 6.} = ',loss.eval({X: 4., Y: 6.}))
print('大家都一样')
打印输出:
sess.run(loss, feed_dict = {X: 4., Y: 6.}) = 9.0
loss.eval({X: 4., Y: 6.} = 9.0
大家都一样
因此可以看到,eval() 其实就是tf.Tensor的Session.run() 的另外一种写法。
下面两种写法是等效的:
with tf.Session() as sess:
print(accuracy.eval({x:mnist.test.images,y_: mnist.test.labels}))
with tf.Session() as sess:
print(sess.run(accuracy, {x:mnist.test.images,y_: mnist.test.labels}))
但是要注意的是,eval()只能用于tf.Tensor类对象,也就是有输出的Operation。对于没有输出的Operation, 可以用.run()或者Session.run()。Session.run()没有这个限制。
桥本环奈真好看!!!!