Python Tensorflow:使用as_default()设置默认会话。\u输入
我写 为什么我没有实现将x作为默认会话?我知道我可以在“with”块内完成,但我想知道为什么这不起作用 注意,如果我写Python Tensorflow:使用as_default()设置默认会话。\u输入,python,tensorflow,machine-learning,Python,Tensorflow,Machine Learning,我写 为什么我没有实现将x作为默认会话?我知道我可以在“with”块内完成,但我想知道为什么这不起作用 注意,如果我写 import tensorflow as tf x = tf.Session() x.as_default().__enter__() print(tf.get_default_session()) # prints "None" 这是否会创建一个我无法关闭的无名会话,因此它将一直运行,直到我重新启动内核?是否有方法检查当前打开的会话?简单修复: import tensorf
import tensorflow as tf
x = tf.Session()
x.as_default().__enter__()
print(tf.get_default_session()) # prints "None"
这是否会创建一个我无法关闭的无名会话,因此它将一直运行,直到我重新启动内核?是否有方法检查当前打开的会话?简单修复:
import tensorflow as tf
tf.Session()
结果:
import tensorflow as tf
x = tf.Session().__enter__()
print(tf.get_default_session())
更新 要回答您(最初令人困惑)的后续问题: 使用with语句所做的是进入和退出上下文管理器。这将导致设置和取消设置默认会话。但它并没有打开和关闭您的会话(看起来,这让我很困惑,我只是在一些实验之后才看到它)。请尝试此代码以查看其运行情况:
>>> tf.Session().as_default()
<contextlib._GeneratorContextManager object at 0x7f6820805a58>
>>> tf.Session()
<tensorflow.python.client.session.Session object at 0x7f6820805898>
打印(tf.get\u default\u session())
没有一个
>>>x=tf.Session()
>>>打印(tf.get\u default\u session())
没有一个
>>>使用x.as_default():
... 打印(tf.get\u default\u session())
...
>>>打印(x)
在这些语句的末尾,我们看到您的会话从未关闭,但在这一过程中,我们看到默认会话已按预期设置和取消设置
使用标准with语句可以关闭会话和设置/取消设置默认会话
>>> print(tf.get_default_session())
None
>>> x = tf.Session()
>>> print(tf.get_default_session())
None
>>> with x.as_default():
... print(tf.get_default_session())
...
<tensorflow.python.client.session.Session object at 0x7f09eb9fb550>
>>> print(x)
<tensorflow.python.client.session.Session object at 0x7f09eb9fb550>
将tf.Session()作为sess的>>:
... 打印(tf.get\u default\u session())
即使你给tensorflow会话命名,事情也会变得糟糕。如果你不给它命名,tf将不知道它必须在哪个会话下运行哪个操作。@chrisz你能再解释一下吗?比如我把它开得太久?(或者你可以提供一个参考资料)我有点困惑:当我用tf.Session()说。as_default()
,是不是\u enter\u()
调用了tf.Session()。as_default()
返回的东西?是的,但是tf.Session()。as_default()
返回的东西与tf.Session()返回的东西不一样
正在返回。我从未使用过tf.Session().as\u default()
,因此我无法解释as\u default()
在这里到底做了什么。我只是注意到它没有返回会话。哦,我想我知道它在做什么,因为_default()。如果您正在运行多个会话,并且希望切换当前全局默认会话,这可能会很有用。谢谢,这很有用。关于与的主题,我在(编辑)问题中提到的两段代码如何做不同的事情?具体地说,当我将与
一起使用时,\uuuu enter\uuu()
是否总是调用与
一起返回的东西?谢谢!您已经澄清了这两段代码做不同的事情。我想这意味着我对和的工作原理感到困惑。不使用with
只需调用\uu输入
就可以通过with
返回的内容了吗?它不能,对,因为我写的两段代码做不同的事情。(我说的是x.as\u default()。\uu输入
,然后我说的是与x.as\u default()
。顺便说一句,如果我问的后续问题太多,请告诉我
>>> tf.Session().as_default()
<contextlib._GeneratorContextManager object at 0x7f6820805a58>
>>> tf.Session()
<tensorflow.python.client.session.Session object at 0x7f6820805898>
>>> print(tf.get_default_session())
None
>>> x = tf.Session()
>>> print(tf.get_default_session())
None
>>> with x.as_default():
... print(tf.get_default_session())
...
<tensorflow.python.client.session.Session object at 0x7f09eb9fb550>
>>> print(x)
<tensorflow.python.client.session.Session object at 0x7f09eb9fb550>
>>> with tf.Session() as sess:
... print(tf.get_default_session())
<tensorflow.python.client.session.Session object at 0x7f09eb9fbbe0>