如何在Keras中设置自定义误差阈值并在误差达0.02时停止训练?
解决Keras自定义误差阈值停止训练的问题
嘿,这事儿其实用Keras的EarlyStopping回调就能轻松搞定!它专门用来监控训练过程中的指标,当达到你设定的误差阈值时自动停止训练,完全贴合你的需求。
下面是修改后的完整代码,我给你加了关键的回调配置和注释,一看就懂:
from keras.models import Sequential from keras.layers import Dense # 导入早停回调工具 from keras.callbacks import EarlyStopping model = Sequential() model.add(Dense(512, activation='relu', input_shape=(dimData,))) model.add(Dense(512, activation='relu')) model.add(Dense(512, activation='relu')) model.add(Dense(nClasses, activation='softmax')) # 配置网络 model.compile(optimizer='rmsprop', loss='categorical_crossentropy', metrics=['accuracy']) # 定义早停规则:当误差降到0.02时停止训练 early_stop = EarlyStopping( monitor='val_loss', # 监控验证集损失(想监控训练集就改成'loss') min_delta=0.02, # 你设定的误差阈值,损失低于这个值就触发停止 patience=0, # 不需要等待额外轮次,达标立刻停 mode='min', # 因为损失越小越好,所以用min模式 restore_best_weights=True # 停止后自动恢复到损失最低的那轮权重 ) # 训练时把回调加进去 history = model.fit( train_data, train_labels_one_hot, batch_size=256, epochs=20, verbose=1, validation_data=(test_data, test_labels_one_hot), callbacks=[early_stop] # 传入早停回调 )
关键参数说明:
monitor='val_loss':我选了验证集损失,因为它更能反映模型的泛化能力;如果你的需求是盯着训练集误差,直接改成'loss'就行。min_delta=0.02:这就是你要的误差阈值,当监控的指标降到这个值以下时,训练会立刻停止。patience=0:意思是不等待,达标就停;如果怕偶然波动,你可以设成1或2,也就是连续1-2轮都低于阈值才停止。restore_best_weights=True:这个很实用,能让模型最终保留的是损失最低时的权重,避免最后一轮波动带来的影响。
这样调整后,你的模型就会在误差降到0.02的时候自动停止训练啦,是不是超简单?
内容的提问来源于stack exchange,提问作者Adn Agung
相关产品推荐
相关产品推荐

