各种优化算法在 torch.optim 这个包里面
torch.optim 这个包里面有很多的优化算法,比如我们常用的随机梯度下降算法,添加动量的随机梯度下降算法。
&&
一、原理
训练数据的终极目的是得到一个训练好的模型,即这个模型里面的参数是最优的,也就是这些参数使得损失函数达到了最小,或者说模型收敛了(参数不再改变了)
二、 一阶优化算法
什么是梯度:
梯度就是导数,梯度是导数的多变量表达式,还有一种说法就是“梯度是函数增加最快的方向”,前面可视化过梯度,就是一个数值。
一阶优化算法包括梯度下降算法:
通过梯度来更新参数,使损失函数达到最小
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190820165102554.jpg?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3poYW5seTE5,size_16,color_FFFFFF,t_70)
三、损失函数通常的调用方式:
1. 定义优化方法:
optimizer = torch.optim.SGD(model.parameters(),lr = 0.01,momentum = 0.9)
model.parameters():模型的参数
lr = 0.01:学习率
momentum = 0.9:动量
2. 在进行优化之前,要先将梯度归零:
optimizer.zero_grad()
3. 反向传播,自动求导,得到每个参数的梯度:
loss.backward()
4. 进一步的更新:
optimizer.step()