Pytorch学习笔记(二)反向传播与梯度下降

1.requires_grad和grad_fn

为了便于在反向传播的过程中计算梯度,可以在使用grad_fn来保存该tensor的运算过程。当我们需要启动grad_fn时,需要将requires_grad设置为True。

t=torch.tensor([1.0,2.0,3.0],requires_grad=True)  #这里的tensor必须为浮点型,否则会报错
print(t)   
#tensor([1., 2., 3.], requires_grad=True)

t=t+2*t
print(t)  #grad_fn记录了该tensor进行了相加操作
#tensor([3., 6., 9.], grad_fn=<AddBackward0>)

如果不希望记录这步操作,可以使用with torch.no_grad()

with torch.no_grad():
    c=t+2*t
    print(c)
#tensor([3., 6., 9.])

2.out.backward()

利用反向传播计算梯度,将结果累加到自变量x.grad

t=torch.tensor([1.0,2.0,3.0],requires_grad=True)  #这里的tensor必须为浮点型,否则会报错

z=pow((t-1),2)
out=z.sum()
out.backward() #反向传播计算梯度,out必须为标量
print(t.grad)  #out对t中的每个变量求偏导

#tensor([0., 2., 4.])

注意:(1)由于梯度时累加的,所以每次更新后需要清空梯度

(2)tensor.data用于获取tensor中的数据,不管requires_grad的取值

(3)requires_grad=True时,tensor不能直接转numpy,需要tensor.detach().numpy()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值