torch.nn.parameter.Parameter 使用

torch.nn.parameter.Parameter

一篇讲得很细致的博客:http://haokailong.top/2020/11/01/pytorch-loss-backward-%E7%9A%84%E7%90%86%E8%A7%A3/

使用方式

1. Parameter的理解

Parameter说明当前Tensor是Network的Parameter,不仅require_grad=True,而且需要优化更新。

2. 注意事项

parameter需要与net class绑定,不然不会作为net.parameters()进行优化更新。

3. 使用举例
import torch.nn as nn
class learnedweight(nn.Module):
	self.reg_weight = nn.parameter.Parameter(torch.tensor([1.,2.]), requires_grad = True)
class Net(nn.Module):
	self.learnedweight = learnedweight()
# In Trainer
self.optimizer = Adam(model.parameters()...)

for cur_ir, batch in enumerate(train_loader):
	# 在后向传播中,梯度计算是累积的过程,因此计算前需要清零。
	self.optimizer.zero_grad()
	# 前向传播,损失计算
	loss = model_forward(model, batch)
	# 后向传播,对所有requires_grad=True的Tensor进行梯度计算
	loss.backward()
	# 根据梯度,对model.parameters()进行优化。
	self.optimizer.setp()
知识点补充
梯度计算和权重更新
  • 梯度计算由loss.backward()完成。
    对requires_grad=True的Tensor计算梯度,并保存net parameters的梯度。
  • 权重更新由self.optimizer.setp()完成。
    根据net parameters的梯度,更新net parameters。
梯度累加和梯度清空

loss.backward() 过程中,net parameters的梯度会进行累加。
self.optimizer.zero_grad()清空net parameters的梯度。

  • 梯度累加的实现:多次后向传播,一次优化更新,一次梯度清空。即梯度累加后再做权重更新。
  • 梯度不累加的实现:一次后向传播,一次优化更新,一次梯度清空。(常见)
  • 梯度累加的优点:有博客指出等价于增加batch_size。
requires_grad()和权重更新的关系:
  • 参与运算的Tensor(输入,中间输出,输出,网络权重参数),都可以设置 requires_grad。 requires_grad=True,说明需要对该Tensor计算梯度。
  • 只有网络权重参数,会根据梯度进行优化更新。
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值