如何使用tf.session.run()进行测试(不更新网络参数)?

时间:2017-06-06 09:45:24

标签: validation session testing machine-learning tensorflow

通常我使用tf.session.run()来训练我的网络,并使用eval()来获得测试的准确性或丢失。但是我看到人们也使用session.run()获取测试结果,这对我来说很奇怪。我认为tf.session.run()仅用于培训,而不是测试。

tf.session.run()下有什么秘密,我不知道吗?

非常感谢!

1 个答案:

答案 0 :(得分:5)

tf.session.run()意味着运行一个或多个TF操作,或评估TF张量,甚至可能混合这两个类别。

当调用张量时,它基本上会像eval()一样评估它。您可以使用sess.run(train_op, feed_dict=train_data)将其用于培训,这将更新您的变量值,因为这就是train_op所做的事情。但是,如果您致电sess.run(accuracy, feed_dict=data),当输入值为accuracy给出的值时,无论是培训,验证还是测试数据,它都会评估data张量的值,并且它不会更改变量值,因为您只是评估张量,而不是运行更改变量值的操作。

所以tf.session.run()比你想象的要广泛得多,即使在考试时间,它也是推断或评估你的表现的常用方法!

您甚至可以同时执行多项操作,这样可以避免在同一输入上多次执行正向传递:

_, loss_value, accuracy_value = sess.run([train_op, loss_tensor, accuracy_tensor], feed_dict=data)
print('Loss value: %f' % loss_value)