【发布时间】:2022-04-08 14:34:57
【问题描述】:
我想为使用tensorflow构建的神经网络模型实现两个回调EarlyStopping和ReduceLearningRateOnPlateau。 (我没有使用Keras)
下面的示例代码是我在自己写的脚本中如何实现早停的,不知道对不对。
# A list to record loss on validation set
val_buff = []
# If early_stop == True, then terminate training process
early_stop = False
while icount < maxEpoches:
'''Shuffle the training set'''
'''Update the model by using Adam optimizer over the entire training set'''
# Evaluate loss on validation set
val_loss = self.sess.run(self.loss, feed_dict = feeddict_val)
val_buff.append(val_loss)
if icount % ep == 0:
diff = np.array([val_buff[ind] - val_buff[ind - 1] for ind in range(1, len(val_buff))])
bad = len(diff[diff > 0])
if bad > 0.5 * len(diff):
early_stop = True
if early_stop:
self.saver.save(self.sess, 'model.ckpt')
raise OverFlow()
val_buff = []
icount += 1
当我训练模型并跟踪验证集的损失时,我发现损失会上下波动,因此很难判断模型何时开始过度拟合。
既然Earlystopping和ReduceLearningRateOnPlateau很相似,那如何修改上面的代码来实现ReduceLearningRateOnPlateau呢?
【问题讨论】:
标签: python tensorflow