训练模型时,我想在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/

10-11 02:20