python - 在 python3 中运行“import tensorflow”会发生什么?
问题描述
我试图理解为什么我在子进程中启动时无法正确运行(最新的)TensorFlow。
父进程运行import tensorflow
,但除非我做一些感觉很hacky的事情,否则后续调用sess.run(...)
将挂起。
(顺便说一句,这是一个非常 hacky 的东西。目标是让 TensorFlow 在multiprocessing.Process
子类中工作。通过仅在__init__
ing 子类的实例和调用start()
, 调用之后才导入 Tensorflow sess.run(...)
。)
由于这些原因,我认为问题源于我调用import
父进程。我想避免非常hacky的解决方法。当import tensorflow
被调用阻止 atf.Session
在子进程中工作时会发生什么?
更新:
在简化的代码中,让我描述一下到底发生了什么。
子进程挂起sess.run(...)
:
import tensorflow as tf
class Subprocess(multiprocessing.Process):
def __init__(self):
...
self.model = ...
self.output = ...
self.sess = tf.Session(...)
self.sess.run(...)
def run(self):
while True:
self.sess.run(self.output)
child = Subprocess()
child.start()
但这有效:
import tensorflow as tf
class Subprocess(multiprocessing.Process):
def __init__(self):
...
def run(self):
self.model = ...
self.output = ...
self.sess = tf.Session(...)
self.sess.run(...)
while True:
self.sess.run(self.output)
child = Subprocess()
child.start()
这也有效:
import tensorflow as tf
class Subprocess(multiprocessing.Process):
def __init__(self):
...
self.model = ...
self.output = ...
def run(self):
self.sess = tf.Session(...)
self.sess.run(...)
while True:
self.sess.run(self.output)
child = Subprocess()
child.start()
由此看来,在子进程中启动 TensorFlow 的问题与导入 TensorFlow 无关(正如许多 SO 答案所暗示的那样)。相反,问题与在不同(父)进程中创建的子进程中tf.Session
使用a有关。
我有一种预感,一个tf.Session
实例无法在进程之间共享,但问题仍然存在。
解决方案
推荐阅读
- amazon-web-services - AWS Cloudformation - 安全组模板错误
- python - AttributeError:“函数”对象没有属性“网格”
- java - 我正在做一个关于代码大战的任务,但它不起作用
- go - 如何操纵时间?
- c# - 在 C# 中使用节点选择方法处理旧式 XML 的问题
- java - antlr4 中的 visitChildren() 实际上做了什么?(爪哇)
- amazon-web-services - 以跨账户 CodeCommit 存储库为源的 AWS 管道
- algorithm - 算法是否依赖于底层数字表示?
- node.js - ElasticBeanstalk Amazon Linux 2 节点未登录到 web.stdout
- opengl - 在 OpenGL 中启用快速 Z 清除