Keras earlystopping:打印选定的纪元

时间:2018-01-28 18:06:43

标签: python callback keras

简单的问题。我正在以下列形式使用Keras预先停止:

Earlystop = EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto')

一旦模型适合,我怎样才能让Keras打印所选的纪元?我认为你必须使用日志,但不太清楚如何。

感谢。

修改

完整的代码很长!让我添加一些比我给的更多。希望它会有所帮助。

# Define model
def design_flexiNN(m_type, neurons, shape_timestep, shape_feature, activation, kernel_ini):
    model = Sequential()
    model.add(Dense(neurons, input_dim=shape_feature, activation = activation, use_bias=True, kernel_initializer=kernel_ini))
    model.add(Dense(1, use_bias=True))
    model.compile(loss='mae', optimizer='Adam')
return model

# fit model
def fit_flexiNN(m_type, train_X, train_y, epochs, batch_size, test_X, test_y):  
    history = model.fit(train_X, train_y, epochs=epochs, batch_size=batch_size, callbacks=callbacks_list, validation_data=(test_X, test_y), verbose=0, shuffle=False)

Earlystop = EarlyStopping(monitor='val_loss', min_delta=0, patience=5, verbose=1, mode='auto')

callbacks_list = [Earlystop]

model = design_flexiNN(m_type, neurons, neurons_step, train_X_feature_shape, activation, kernel_ini);

history = fit_flexiNN(m_type, train_X, train_y, ini_epochs, batch_size, test_X, test_y)

我已经能够通过len(history.history['val_loss'])减去1推断出所选的纪元,但是如果你的patience高于零,则无效。

1 个答案:

答案 0 :(得分:0)

开始尝试自己解决这个问题,并意识到len(history.history['val_loss'])方法几乎是正确的。您需要添加的只是:

len(history.history['val_loss']) - patience

这应该为您提供所选模型的纪元编号(假设该模型未在全部纪元中运行)。

一种更彻底的方法是:

model_loss = history.history["val_loss"]

epoch_chosen = model_loss.index(min(model_loss)) +1
print(epoch_chosen)

希望这会有所帮助!