[Pytorch] pytorch笔记 <三>
2024-09-28 02:42:22
pytorch笔记 <三>
optimizer.zero_grad()
将梯度变为0,用于每个batch最开始,因为梯度在不同batch之间不是累加的,所以必须在每个batch开始的时候初始化累计梯度,重置为0.
for epoch in range(num_epoches):# 每个epoch
for inputs,labels in dataloader:# 每个batch
optimizer.zero_grad()# 初始化梯度
outputs = model(inputs)# 正向
_,pred = torch.max(outputs,1)
loss = criterion(inputs,pred)# 计算loss
#...
loss.backward() # 反向
optimizer.step()# 更新权重
torch.max()
在某个dim上返回最大的值以及在该dim上的索引,所以是返回两个值。
max(input, dim, keepdim=False, out=None)
>>> import torch
>>> a = torch.randn(3,3)
>>> print(torch.max(a,1))
(tensor([1.0404, 1.8460, 0.5961]), tensor([2, 1, 0]))
model(x)输出的是概率,要获得类别必须通过torch.max来获得,但是我们求loss的时候还是求网络输出概率与label的loss,因为我们的label是被one-hot编码的,所以这两者的loss才是有效的,因为交叉熵衡量的是两个概率分布之间的相似度。
optimizer.step() 以及 scheduler.step()
optimizer.step()用在每个batch内,当一个batch的数据计算完之后,通过optimizer.step()函数来完成权重的更新,而scheduler.step()用在每个epoch内,当一个epoch的数据运算完之后,调用一下这个函数,以此来决策是否更新我们的learning_rate超参等。
exp_lr_scheduler = lr_scheduler.StepLR(optimizer_ft, step_size=7, gamma=0.1)
# 每隔step_size个epoch learning_rate变为原来的0.1
# 然后在一个epoch之后执行
exp_lr_scheduler.step()
最新文章
- cglib动态新增类方法
- DevExpress中设置PanelControl背景的方法
- Application Initialization Module for IIS 7.5
- Android 5.x特性概览三
- TFS 配置 报表权限问题
- app 性能优化的那些事
- html背景自动移动
- C++ notes for beginners(2)
- WPF后台访问XAML元素
- uva 1391 Astronauts(2-SAT)
- TypeScript环境搭建
- MSMQ是什么?
- javascript设计模式——中介者模式
- cf24D. Broken robot(高斯消元)
- [转] js中的事件委托或是事件代理详解
- Python学习(十六)—— 数据库
- javaScript 变量提升 var let const,以及JS 的解析阶段和执行阶段
- Vue中directives的用法
- manacher算法求最长回文子序列
- ";废物利用";也抄袭——废旧喷墨打印机和光驱DIY";绘图仪";