我有一个生成器函数,用它可以生成元组(输入、目标),用 fit_generator()
方法在 Keras 中训练我的模型。
我的数据集分为 9 个相等的部分。我希望使用 fit_generator()
方法对数据集进行留一交叉验证,并保持之前训练学习到的参数。
我的问题是,对模型多次调用 fit_generator()
方法会使它从头开始重新学习之前的训练和验证集合上的学习参数,还是保持这些已学习的参数从而提高准确性?
经过一番搜索,我发现在 Keras 中,fit()
方法会保留已学习的参数,例如在 Calling "fit" multiple times in Keras 上。但我不确定对于 fit_generator()
是否也是如此,如果是的话,是否可以用于数据的交叉验证。
我考虑实现交叉验证的伪代码如下:
class DatasetGenerator(Sequence):
def __init__(validation_id, mode):
#Some code
def __getitem__():
#The generator function
#Some code
return (inputs, targets)
for id in range(9):
train_set = DatasetGenerator(id, 'train')
#train_set contains all 8 parts leaving the id part out for validation.
validation_set = DatasetGenerator(id, 'val')
#val_set contains the id part.
history = model.fit_generator(train_set, epochs = 10, steps_per_epoch = 24000, validation_data = val_set, validation_steps = 3000)
print('History Dict:', history.history)
results = model.evaluate_generator(test_set, steps=steps)
print('Test loss, acc:', results)
在for
循环的每次迭代中,model
是否会保持已学习参数的完整性并进一步改善它们?
keras.backend.clear_session()
将清除所有权重并将其恢复到初始状态。 - TheLoneDeranger