Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Tensorflow平台上实施早期停止并降低学习率?_Python_Tensorflow - Fatal编程技术网

Python 如何在Tensorflow平台上实施早期停止并降低学习率?

Python 如何在Tensorflow平台上实施早期停止并降低学习率?,python,tensorflow,Python,Tensorflow,我想为使用tensorflow构建的神经网络模型实现两个回调earlystoping和reducelearningrateonplation。(我没有使用Keras) 下面的示例代码是如何在我编写的脚本中实现提前停止的,我不知道它是否正确 # A list to record loss on validation set val_buff = [] # If early_stop == True, then terminate training process early_stop = Fals

我想为使用
tensorflow
构建的神经网络模型实现两个回调
earlystoping
reducelearningrateonplation
。(我没有使用
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
#在验证集上记录丢失的列表
val_buff=[]
#如果early_stop==True,则终止培训过程
提前停止=错误
当i计数0])
如果坏>0.5*len(差异):
提前停止=正确
如果提前停止:
self.saver.save(self.sess,'model.ckpt')
提升溢出()
val_buff=[]
i计数+=1
当我训练模型并跟踪验证集上的损失时,我发现损失会上下波动,因此很难判断模型何时开始过度拟合


由于
earlystoping
reducelearningrateonplation
非常相似,我如何修改上面的代码来实现
reducelearningrateonplation

振荡错误/丢失非常常见。实施早期停止或学习率下降规则的主要问题是验证损失计算发生相对较晚。为了解决这个问题,我可能会建议下一条规则:当最佳验证错误至少超过N个纪元时停止训练

max_stagnation = 5 # number of epochs without improvement to tolerate
best_val_loss, best_val_epoch = None, None

for epoch in range(max_epochs):
    # train an epoch ...
    val_loss = evaluate()
    if best_val_loss is None or best_val_loss < val_loss:
        best_val_loss, best_val_epoch = val_loss, epoch
    if best_val_epoch < epoch - max_stagnation:
        # nothing is improving for a while
        early_stop = True
        break  
max_stastage=5#无法容忍改善的时代数
最佳价值损失,最佳价值纪元=无,无
对于范围内的历元(最大历元):
#训练一个时代。。。
val_损失=评估()
如果最佳值损失为无或最佳值损失<值损失:
最佳损失,最佳纪元=最佳损失,纪元
如果最佳时间