您好,欢迎访问这里是您的网站名称官网!
常见问答
联系我们
大发-大发娱乐空调设备工厂站
邮箱:admin@youweb.com
电话:400-123-4567
地址:广东省广州市天河区88号
当前位置: 首页 > 新闻动态 > 常见问答

常见问答

深度学习(十四)
发布时间:2024-06-10 06:12:03浏览次数:

反向传播可以求出神经网路中每个需要调节参数的梯度(grad),优化器可以根据梯度进行调整,达到降低整体误差的作用。下面我们对优化器进行介绍。

官方文档:torch.optim — PyTorch 2.0 documentation

举个栗子:


  • 首先选择优化器的算法

  • 之后在优化器中放入模型参数,这一步是必备

  • 还可在函数中设置一些参数,如学习速率(这是每个优化器中几乎都会有的参数)

方法就是利用我们之前获得的梯度,对神经网络中的参数进行更新。

举个栗子:


  • 步骤是必选的

  • 我们的输入经过了模型,并得到了输出

  • 之后计算输出和target之间的误差

  • 调用误差的反向传播更新每个参数对应的梯度

  • 调用对卷积核中的参数进行优化调整

  • 之后继续进入循环,使用函数对每个参数的梯度进行清零,防止上一轮循环中计算出来的梯度影响下一轮循环。

优化器中算法共有的参数(其他参数因优化器的算法而异):

  • params: 传入优化器模型中的参数

  • lr: learning rate,即学习速率

关于学习速率

  • 一般来说,学习速率设置得太大,模型运行起来会不稳定

  • 学习速率设置得太小,模型训练起来会过

  • 建议在最开始训练模型的时候,选择设置一个较大的学习速率;训练到后面的时候,再选择一个较小的学习速率

代码栗子:


  • [Run]

    tensor(18713.4336, grad_fn=)
    tensor(16178.3564, grad_fn=)
    tensor(15432.6172, grad_fn=)
    tensor(16043.1025, grad_fn=)
    tensor(18018.3359, grad_fn=)

    ......

总结使用优化器训练的训练套路):

  • 设置损失函数loss function

  • 定义优化器optim

  • 从使用循环dataloader中的数据:for data in dataloder

    • 取出图片imgs,标签targets:imgs,targets=data

    • 将图片放入神经网络,并得到一个输出:output=model(imgs)

    • 计算误差:loss_result=loss(output,targets)

    • 使用优化器,初始化参数的梯度为0:optim.zero_grad()

    • 使用反向传播求出梯度:loss_result.backward()

    • 根据梯度,对每一个参数进行更新:optim.step()

  • 进入下一个循环,直到完成训练所需的循环次数

再复制粘贴一次:

  • 一般来说,学习速率设置得太大,模型运行起来会不稳定

  • 学习速率设置得太小,模型训练起来会过

  • 建议在最开始训练模型的时候,选择设置一个较大的学习速率;训练到后面的时候,再选择一个较小的学习速率

pytorch中提供了一些方法,可以动态地调整学习速率

官方文档:StepLR — PyTorch 2.0 documentation

参数介绍:

  • optimizer: 放入模型所使用的优化器名称

  • step_size(int): 训练的时候,每多少步进行一个更新

  • gamma(float): 默认为0.1。在循环中,每次训练的时候,新的学习速率=原来学习速率×gamma

不同的优化器中有很多不同的参数,但是这些参数都是跟几个特定的算法相关的,这些需要使用的时候再去了解。

如果只是单纯地使用优化器,那么只需设置optimizer学习速率,就可以满足绝大部分的训练需求。

平台注册入口