【问题标题】:How can I handle TensorFlow sessions to train multiple Keras models at the same time?如何处理 TensorFlow 会话以同时训练多个 Keras 模型?
【发布时间】:2022-02-18 23:29:26
【问题描述】:

我需要同时训练多个 Keras 模型。我正在使用 TensorFlow 后端。问题是,当我尝试同时训练两个模型时,我得到Attempting to use uninitialized value

这个错误并不真正相关,主要问题似乎是 Keras 迫使两个模型在同一个会话中使用同一个图创建,所以 它会发生冲突。

我是 TensorFlow 的新手,但我的直觉是答案非常简单:您必须为每个 Keras 模型创建不同的会话并在各自的会话中训练它们。有人可以解释一下怎么做吗?

我真的希望能够在仍然使用 Keras 而不是在纯 TensorFlow 中编写所有代码的同时解决这个问题。任何解决方法也将不胜感激。

【问题讨论】:

    标签: session tensorflow keras


    【解决方案1】:

    你是对的,Keras 自动使用默认会话。 您可以使用tf.compat.v1.keras.backend.get_session()tf.compat.v1.keras.backend.set_session(sess) 手动设置全局Keras 会话(请参阅documentation)。

    例如:

    sess1 = tf.Session()
    tf.compat.v1.keras.backend.set_session(sess1)
    # Train your first Keras model here ...
    
    sess2 = tf.Session()
    tf.compat.v1.keras.backend.set_session(sess2)
    # Train your second Keras model here ...
    

    【讨论】:

    • 链接当前已失效(由于 tensorflow 2)。您现在应该使用 compat.v1 或新的 (?) clear_session
    【解决方案2】:

    我使用 python 多处理 https://docs.python.org/3.4/library/multiprocessing.html 并行训练多个模型。

    我有一个函数,它接受两个参数,一个输入队列和一个输出队列,这个函数在每个进程中运行。该函数的结构如下:

    def worker(in_queue, out_queue):
        import keras
    
        while True:
            parameters = in_queue.get()
            network_parameters = parameters[0]
            train_inputs = parameters[1]
            train_outputs = parameters[2]
            test_inputs = parameters[3]
            test_outputs = parameters[4]
    
            build the network based on the given parameters
    
            train the network
    
            test the network if required
    
            out_queue.put(result)
    

    根据需要从主 python 脚本启动尽可能多的进程(并创建尽可能多的进出队列)。通过在其 in queue 上调用 put 将作业添加到 worker 并通过在其 out queue 上调用 get 来获取结果。

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-20
      • 2020-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多