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

时间:2018-10-15 11:02:50

标签: tensorflow keras

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

for i in range(10):
    model = create_model(i)
    model.compile(...)
    model.fit(...)
    some_function_to_save_model(model)

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

虽然此代码对我有用,但我没有发现任何问题,但我不清楚这是否是正确的处理方法,因为所有模型都位于同一张TensorFlow Graph中(如果我了解Keras / TensorFlow的工作方式,正确地在一起)。我的问题是:

  1. 这是运行多个独立模型的正确方法。 (我不希望第i行对第i+1行有任何影响)
  2. 正在从不同的python脚本(在本示例中为model1.py,model2.py,... model9.py)运行模型,这在任何情况下从技术上来说都是更好的方式(我不是指可读性/可重复性),因为每个模型都将拥有自己的单独TensorFlow图/会话?
  3. 如果在保存功能(keras.backend.clear_session()循环内的some_function_to_save_model()之后运行)中,通过for清除会话/删除图表是否有影响?与当前设置相比,这在某种程度上是有益的吗?

再一次:如果所有模型都集中在一个脚本中,而不是每个模型仅在单独创建和训练模型的情况下,所有模型都局限在一个脚本中,那么我不会担心由于创建混乱的代码而引起的问题。

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

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

  1. create_and_train.py:

    for i in range(10):
        model = create_model(i)
        model.compile(...)
        model.fit(...)
        some_function_to_save_model(model)
    
  2. create_and_train.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()
    
  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)
    

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

0 个答案:

没有答案