深度学习之“训练热身”(warm up) 您所在的位置:网站首页 什么是exox热身 深度学习之“训练热身”(warm up)

深度学习之“训练热身”(warm up)

2024-05-27 17:54| 来源: 网络整理| 查看: 265

前言:

本文主要根据几个大佬的文章整理为适合自己学习的方式,希望对您也有所帮助,在此对各位大佬表示感谢!特附原文链接如下: 1. 目标检测之人眼状态检测 2. 深度学习 warmup 策略 3. Resnet-18-训练实验-warm up操作

正文 1. 背景

学习率是最影响性能的超参数之一,如果我们只能调整一个超参数,那么最好的选择就是它。 其实在我们的大多数情况下,遇到 loss 变成 NaN 的情况大多数是由于学习率选择不当引起的。

2. 学习率的设置 — “不同阶段不同值:上升 -> 平稳 -> 下降”

由于神经网络在刚开始训练的时候是非常不稳定的,因此刚开始的学习率应当设置得很低很低,这样可以保证网络能够具有良好的收敛性。但是较低的学习率会使得训练过程变得非常缓慢,因此这里会采用以较低学习率逐渐增大至较高学习率的方式实现网络训练的“热身”阶段,称为 warmup stage。但是如果我们使得网络训练的 loss 最小,那么一直使用较高学习率是不合适的,因为它会使得权重的梯度一直来回震荡,很难使训练的损失值达到全局最低谷。这个代码采用了 cosine 的衰减方式,这个阶段可以称为 consine decay stage。

3. tf-yolov3作者的相关源码 with tf.name_scope('learn_rate'): self.global_step = tf.Variable(1.0, dtype=tf.float64, trainable=False, name='global_step') warmup_steps = tf.constant(self.warmup_periods * self.steps_per_period, dtype=tf.float64, name='warmup_steps') # warmup_periods epochs train_steps = tf.constant((self.first_stage_epochs + self.second_stage_epochs) * self.steps_per_period, dtype=tf.float64, name='train_steps') self.learn_rate = tf.cond( pred=self.global_step


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有