Python 澄清tf.Session()作用域TensorFlow
我有一个python程序,在其中我定义了一个网络,像往常一样,我在一个函数中对它进行训练Python 澄清tf.Session()作用域TensorFlow,python,tensorflow,Python,Tensorflow,我有一个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={.... 在损失函数中,我需要做很多工作才能得到损失,特别是,我必须取张量中的最大值,并用它来做一些事情。
with tf.Session() as sess:
...
for epoch in xrange(num_epochs):
...
for n in xrange(num_batches):
_, c = sess.run([optimizer, loss], feed_dict={....
在损失函数中,我需要做很多工作才能得到损失,特别是,我必须取张量中的最大值,并用它来做一些事情。这里有一个例子
values = tf.constant([0, 1, 2, 0, 2], dtype=tf.float32)
max_values = tf.reduce_max(values) # Tensor...
...
在max\u values
行中,如果我使用debug,它会说它是张量,而不是值,因此如果我以这种方式更改代码,并将会话传递到在前一段代码中创建的函数
values = tf.constant([0, 1, 2, 0, 2], dtype=tf.float32)
max_values = sess.run(tf.reduce_max(values)) # 2.0
...
它起作用了。但是这个损失函数已经在会话的范围内了,所以我的问题是为什么结果是张量而不是数字?是否有一种方法可以在不将会话传递给丢失函数的情况下获取值?根据:
TensorFlow使用tf.Session类表示
客户机程序——通常是Python程序,尽管类似
接口可以用其他语言提供,也可以使用C++运行时。
这意味着当您执行values=tf.constant([0,1,2,0,2],dtype=tf.float32)
时,您只需将一个节点插入到tensorflow图中!由于Python是一个低级C++运行时的高级API,所以实际上需要一个会话来在这个低级运行时评估Python代码。
这就是为什么每次需要计算或计算Tensorflow变量/方法/常量/等时,都需要在会话中使用tf.Session().run(yournode)
我希望它有助于使用Tensor.eval()函数将张量转换为其值。
在下面的示例中,可以获得最大值张量的值
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(),则会出现错误
您还可以使用即时执行模式 好吧,那就没有办法了