我想在队列中训练不同的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的工作方式,正确地在一起)。我的问题是:
i
行对第i+1
行有任何影响)keras.backend.clear_session()
循环内的some_function_to_save_model()
之后运行)中,通过for
清除会话/删除图表是否有影响?与当前设置相比,这在某种程度上是有益的吗?再一次:如果所有模型都集中在一个脚本中,而不是每个模型仅在单独创建和训练模型的情况下,所有模型都局限在一个脚本中,那么我不会担心由于创建混乱的代码而引起的问题。
不幸的是,我没有找到一个简洁的答案(只有使用这两种方法的建议)。也许有人可以启发我?
编辑:也许我应该更精确一些。基本上,我想对以下三种情况的区别(优缺点)进行技术解释:
create_and_train.py:
for i in range(10):
model = create_model(i)
model.compile(...)
model.fit(...)
some_function_to_save_model(model)
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()
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脚本