torch.optim optimizer函数
函数 torch Optimizer
2023-09-11 14:22:51 时间
class torch.optim.SGD(params, lr=, momentum=0, dampening=0, weight_decay=0, nesterov=False)[source]
实现随机梯度下降算法(momentum可选)。
Nesterov动量基于On the importance of initialization and momentum in deep learning中的公式.
参数:
- params (iterable) – 待优化参数的iterable或者是定义了参数组的dict
- lr (
float
) – 学习率 - momentum (
float
, 可选) – 动量因子(默认:0) - weight_decay (
float
, 可选) – 权重衰减(L2惩罚)(默认:0) - dampening (
float
, 可选) – 动量的抑制因子(默认:0) - nesterov (
bool
, 可选) – 使用Nesterov动量(默认:False)
例子:
>>> optimizer = torch.optim.SGD(model.parameters(), lr=0.1, momentum=0.9)
>>> optimizer.zero_grad() #梯度清零
>>> loss_fn(model(input), target).backward()
>>> optimizer.step()
optimizer.zero_grad()函数会遍历模型的所有参数,通过p.grad.detach_()方法截断反向传播的梯度流,再通过p.grad.zero_()函数将每个参数的梯度值设为0,即上一次的梯度记录被清空。
因为训练的过程通常使用mini-batch方法,所以如果不将梯度清零的话,梯度会与上一个batch的数据相关,因此该函数要写在反向传播和梯度下降之前。
step()函数的作用是执行一次优化步骤,通过梯度下降法来更新参数的值。因为梯度下降是基于梯度的,所以在执行optimizer.step()函数前应先执行loss.backward()函数来计算梯度。
注意:optimizer只负责通过梯度下降进行优化,而不负责产生梯度,梯度是tensor.backward()方法产生的。
相关文章
- C#语法之匿名函数和Lambda表达式
- OpenCV每日函数 图像过滤模块 (14) medianBlur中值滤波函数
- 【YOLOv7/YOLOv5系列算法改进NO.54】改进激活函数为ReLU、RReLU、Hardtanh、ReLU6、Sigmoid、Tanh、Mish、Hardswish、ELU、CELU等
- ZZNUOJ_C语言1106:回文数(函数专题)(完整代码)
- Database之SQL:SQL之over partition by开窗函数的简介、使用方法(求各班级内各自排名/求各班级内第一名/求各班级内分数递增和等案例解析)之详细攻略
- Python之pandas:pandas的get_dummies函数简介(one-hot编码/将字符串似的分类变量转为哑变量/虚拟/伪/指示符变量)及其使用方法之详细攻略
- 先验分布、后验分布、似然函数
- torch.max()函数==》返回该维度的最大值以及该维度最大值对应的索引
- 习题 4.12 用递归方法求···n的值由主函数输入。
- QPainter-rotate()函数分析-文字旋转不倾斜,图片旋转实现等待
- ubuntu使用python调用C语言函数
- C语言主函数main调用带有结构体指针参数的函数的指定类型返回值
- 函数栈帧(值得收藏)
- D3DXVec3LengthSq 函数
- 交叉熵代价函数
- python 爬虫可视化函数,可以先看看要爬取的数据是否存在
- Python数模笔记-模拟退火算法(1)多变量函数优化
- torch中的split函数学习
- pytorch中torch.randn函数