代码之家  ›  专栏  ›  技术社区  ›  Alex Walczak TechZen

在python3中运行“import tensorflow”时会发生什么?

  •  0
  • Alex Walczak TechZen  · 技术社区  · 6 年前

    我试图理解为什么在子进程中启动并使用TensorFlow时无法正确运行(最新的)TensorFlow。

    父进程运行 import tensorflow ,但除非我做了一些让人感觉很不舒服的事情,否则接下来的电话 sess.run(...) 会被吊死的。

    multiprocessing.Process 子类。只在两者之后导入Tensorflow __init__ 调用子类的实例并调用 start() ,呼叫 sess.run(...)

    基于这些原因,我认为问题源于我打电话 import 在父进程中。我想避免非常麻烦的解决方法。什么时候会发生 导入tensorflow tf.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无关(正如许多答案所暗示的那样)。相反,问题与使用 tf.Session 小孩 在中创建的进程 不同的

    我有预感 tf.Session

    0 回复  |  直到 6 年前