我有一个python程序,我在其中定义了一个网络,和往常一样,我在一个函数中训练它
with tf.Session() as sess:
...
for epoch in xrange(num_epochs):
...
for n in xrange(num_batches):
_, c = sess.run([optimizer, loss], feed_dict={....
在损失函数中,我需要做很多工作来得到损失,尤其是,我必须取张量内部的最大值,并用它来做一些事情。这里有个例子
^{pr2}$在max_values
行中,如果我使用debug,它说明它是一个张量而不是一个值,所以如果我以这种方式更改代码,并将会话传递给上一段代码中创建的函数
values = tf.constant([0, 1, 2, 0, 2], dtype=tf.float32)
max_values = sess.run(tf.reduce_max(values)) # 2.0
...
它起作用了。但是这个损失函数已经在一个会话的范围内了,所以我的问题是为什么结果是张量而不是数字?有没有一种方法可以在不将会话传递给loss函数的情况下获得值?
使用张量评估()将张量转换为其值的函数。 在下面的例子中,您可以得到max_values Tensor的值。在
如果在会话范围外调用了loss(),则会出现一个错误。在
也可以使用急执行模式。https://www.tensorflow.org/tutorials/eager/eager_basics
根据documentation:
这意味着当你做
values = tf.constant([0, 1, 2, 0, 2], dtype=tf.float32)
时,你只是在你的tensorflow图中插入一个节点!由于Python是一个低级C++运行时的高级API,所以实际上需要一个会话来在这个低级运行时评估Python代码。在这就是为什么每次需要计算或计算Tensorflow变量/方法/常量/等时,都需要在会话中使用
tf.Session().run(yournode)
运行它我希望对你有帮助
相关问题 更多 >
编程相关推荐