训练模型时,我想在Keras中做三件事:
使用发电机
获取每个时期的历史反馈
使用提前停止
摘要如下所示:
loss = []
acc = []
val_loss = []
val_acc = []
# Outer loop needed for getting the history of each epoch
for i in range(0,100):
hist = model.fit_generator(train_data.flow(x_train_np,y_train_np,batch_size=8),
validation_data = validation_data.flow(x_val_np,y_val_np,batch_size=8),
epochs=1,
samples_per_epoch=len(x_train_np),
callbacks=[earlystop])
loss.append(hist.history['loss'])
acc.append(hist.history['acc'])
val_loss.append(hist.history['val_loss'])
val_acc.append(hist.history['val_acc'])
需要循环以获得每个时期的反馈。但是,这将导致在尽早停止培训后继续进行培训。
那么有没有办法知道循环内何时发生了提前停止,因此我可以手动中断它?
最佳答案
使用fit_generator()
的steps_per_epoch参数。这使您可以将纪元设置为> 1,并且不再需要循环。
现在,提前停止和hist将与静态数据集上的正常fit()
调用完全一致。
为此,您的生成器将退回以继续到某个时期结束后继续工作(这是指每个时期的步骤所定义的批次数量)
关于python - 从生成器训练keras模型,获取每个时期的反馈,并利用Early Stop算法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52181121/