我想知道是否可以使用交叉验证或固定的预定义验证集来确定使用Keras在Python中训练神经网络的“最佳”轮数。我目前的代码如下:
from tensorflow.keras.layers import Dense, Activationfrom tensorflow.keras.models import Sequentialimport pandas as pdimport numpy as npmodel = Sequential()# Adding the input layer and the first hidden layermodel.add(Dense(16, activation = 'relu', input_dim = 243))# Adding the output layermodel.add(Dense(units = 1))model.compile(optimizer = 'adam',loss = 'mean_squared_error')model.fit(X, Y, batch_size = 32, epochs = 20)
如果可以的话,我需要在代码中添加什么?我知道这不是一个可复制的例子,但我认为这对于我的问题来说并不是必要的。
回答:
你完全正确!找到“最佳”训练轮数的最佳方法是使用回调
这将允许你在达到你感兴趣的度量的最佳分数时停止训练。以下是一个示例
model = Sequential()# Adding the input layer and the first hidden layermodel.add(Dense(16, activation = 'relu', input_dim = 243))# Adding the output layermodel.add(Dense(units = 1))model.compile(optimizer = 'adam',loss = 'mean_squared_error')es = EarlyStopping(monitor='val_loss', mode='min', verbose=1, patience=40) # 当验证损失40个轮次内没有减少时停止训练mc = ModelCheckpoint('best_model.h5', monitor='val_loss', mode='min', verbose=1, save_best_only=True) # 在验证损失最小的那一轮保存模型权重train = model.fit((train_X, train_label, batch_size=batch_size),epochs=1000,verbose=1,validation_data=(valid_X, valid_label),callbacks=[es,mc])# 你可以设置为1000个轮次,但模型会在40个轮次内没有更好的验证损失后停止
如果你想加载你的权重,我建议你上网查一下如何操作。保存权重可以让你在不需要重新训练的情况下重用模型。
最后,请注意,始终跟随验证损失分数并不总是最好的做法。一个练习可以是找出如何在准确率达到最大值时保存模型。