简单的问题。我正在以下列形式使用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
高于零,则无效。
答案 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)
希望这会有所帮助!