gpt4 book ai didi

python - tensorflow/keras 中的多线程

转载 作者:太空狗 更新时间:2023-10-29 20:31:49 42 4
gpt4 key购买 nike

我想在一个 Python 应用程序中使用 model.fit() 并行训练一些不同的模型。使用的模型没有必要的共同点,它们在不同时间在同一个应用程序中启动。

首先,我在一个单独的线程中毫无问题地启动了一个 model.fit(),然后是主线程。如果我现在想启动第二个 model.fit(),我会收到以下错误消息:

Exception in thread Thread-1:
tensorflow.python.framework.errors_impl.InvalidArgumentError: Node 'hidden_1/BiasAdd': Unknown input node 'hidden_1/MatMul'

它们都是通过相同的代码行从一个方法开始的:

start_learn(self:)
tf_session = K.get_session() # this creates a new session since one doesn't exist already.
tf_graph = tf.get_default_graph()

keras_learn_thread.Learn(learning_data, model, self.env_cont, tf_session, tf_graph)
learning_results.start()

调用的类/方法如下所示:

def run(self):
tf_session = self.tf_session # take that from __init__()
tf_graph = self.tf_graph # take that from __init__()

with tf_session.as_default():
with tf_graph.as_default():
self.learn(self.learning_data, self.model, self.env_cont)
# now my learn method where model.fit() is located is being started

我想我必须以某种方式为每个线程分配一个新的 tf_session 和一个新的 tf_graph。但我不太确定。我会为每一个简短的想法感到高兴,因为我现在已经坐在这里太久了。

谢谢

最佳答案

我不知道你是否解决了你的问题,但这看起来像是另一个问题 I recently answered .

  • 您需要先在主线程中完成图的创建开始其他人。
  • 在 keras 的情况下,图形在第一次调用拟合或预测函数时被初始化。您可以通过调用模型的一些内部函数来强制创建图形:

    model._make_predict_function()
    model._make_test_function()
    model._make_train_function()

    如果这不起作用,请尝试通过调用虚拟数据来预热模型。

  • 完成图形创建后,在主图形上调用 finalize(),以便它可以安全地与不同线程共享(这将使它成为只读的)。

  • 完成图形还可以帮助您找到图形被无意修改的其他地方。

希望对你有帮助。

关于python - tensorflow/keras 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45998376/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com