【发布时间】:2019-10-27 15:15:34
【问题描述】:
我有一个生成器函数,它生成(输入、目标)的元组,我的模型在 Keras 中使用 fit_generator() 方法进行训练。
我的数据集被分成 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)
model 是否会在 for 循环的每次迭代中保持学习参数不变并改进它们?
【问题讨论】:
-
是的,无论当前的权重是多少,两者都将接受训练。在重新编译之前调用
keras.backend.clear_session()会将所有权重清除回初始状态。
标签: python tensorflow keras deep-learning computer-vision