澄清tf.会议()TensorF示波器

2024-03-29 09:48:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个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函数的情况下获得值?


Tags: 函数run代码in程序for定义tf
2条回答

使用张量评估()将张量转换为其值的函数。 在下面的例子中,您可以得到max_values Tensor的值。在

def loss():
  values = tf.constant([0, 1, 2, 0, 2], dtype=tf.float32)
  max_values = tf.reduce_max(values)
  print (max_values.eval())

with tf.Session() as sess:
  loss()

如果在会话范围外调用了loss(),则会出现一个错误。在

也可以使用急执行模式。https://www.tensorflow.org/tutorials/eager/eager_basics

根据documentation

TensorFlow uses the tf.Session class to represent a connection between the client program -typically a Python program, although a similar interface is available in other languages -and the C++ runtime.

这意味着当你做values = tf.constant([0, 1, 2, 0, 2], dtype=tf.float32)时,你只是在你的tensorflow图中插入一个节点!由于Python是一个低级C++运行时的高级API,所以实际上需要一个会话来在这个低级运行时评估Python代码。在

这就是为什么每次需要计算或计算Tensorflow变量/方法/常量/等时,都需要在会话中使用tf.Session().run(yournode)运行它

我希望对你有帮助

相关问题 更多 >