在一个脚本中训练多个 Keras 模型

blu*_*uub 5 keras tensorflow

我想在队列中训练不同的 Keras 模型(或者在某些情况下只是多次运行同一模型来比较结果)(如果重要的话,使用 TensorFlow 作为后端)。在我当前的设置中,我在一个大的 python 脚本中创建并拟合所有这些模型,例如(以简化的方式):

for i in range(10):
    model = create_model(i)
    model.compile(...)
    model.fit(...)
    some_function_to_save_model(model)
Run Code Online (Sandbox Code Playgroud)

create_model(i)函数为第'次运行创建特定模型i。例如,这包括更改输入/标签的数量。每次运行的编译函数也可以不同(例如不同的优化器)。

虽然这段代码对我有用并且我没有发现任何问题,但我不清楚这是否是正确的方法,因为所有模型都驻留在同一个 TensorFlow Graph 中(如果我理解 Keras / TensorFlow 正确协同工作的方式) 。我的问题是:

  1. 这是运行多个独立模型的正确方法吗?(我不希望i“th run”对i+1“th run”产生任何影响)
  2. 从技术上讲,以任何更好的方式从不同的 python 脚本(在本例中 model1.py、model2.py、... model9.py)运行模型(我在这里不是指可读性/再现性),因为每个模型都会有它自己独立的 TensorFlow Graph / Session?
  3. 如果在保存函数之后(在循环内)keras.backend.clear_session()运行,那么在这种情况下清除会话/删除图形是否有任何影响?与当前的设置相比,这在某种程度上是否有利?some_function_to_save_model()for

再说一遍:如果所有模型都挤在一个脚本中,而不是每个模型仅使用一个脚本来独立创建和训练模型,那么我并不担心由于创建混乱的代码而可能出现的问题。

不幸的是我没有找到一个简洁的答案(只有使用这两种方法的建议)。也许这里有人可以启发我?

编辑:也许我应该更精确。基本上我想对以下三种情况的差异(优点和缺点)进行技术解释:

  1. 创建和训练.py:

    for i in range(10):
        model = create_model(i)
        model.compile(...)
        model.fit(...)
        some_function_to_save_model(model)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 创建和训练.py:

    for i in range(10):
        model = create_model(i)
        model.compile(...)
        model.fit(...)
        some_function_to_save_model(model)
        # clear session:
        keras.backend.clear_session()
    
    Run Code Online (Sandbox Code Playgroud)
  3. create_and_train_i.py,其中 i 在 [0, 1, ..., 9] 中:

    i = 5 # (e.g.)
    model = create_model(i)
    model.compile(...)
    model.fit(...)
    some_function_to_save_model(model)
    
    Run Code Online (Sandbox Code Playgroud)

    例如循环遍历这些的 bash 脚本