Torch学习笔记01

关于backward函数的用法:

分别是out为标量和矢量时候的情况:

import torch

x = torch.tensor([1, 2, 3], dtype=torch.float, requires_grad=True)
y = x + 3
z = y * 3

#  out为标量
# out = z.mean()
# print(out)
# out.backward()
# print(out)
# print("input data:", x.data)
# print("input gradient:", x.grad)
# print("元素个数:", x.numel())

# out为矢量
out = z ** 3
print(out)
out.backward(torch.ones_like(out))
print(out)
print("input data:", x.data)
print("output gradient:", x.grad)

torch中sum()函数

import torch

x = torch.tensor([1, 2, 3, 4, 5, 6, 7])
y = torch.tensor([1, 3, 2, 4, 5, 7, 6])
z = (x == y).sum() # 求解x,y中相等项数之和
print("x==y : ", x == y)
print(z) # 返回的是一个张量
print(z.item()) # 返回的是一个数值

结果如下:

x==y :  tensor([ True, False, False,  True,  True, False, False])
tensor(3)
3

torch中的with torch.no_grad() 的作用:

由于torch中的tensor有一个requires_grad参数,若一个tensor的requires_grad=True,则 在进行反向传播算法时,就会自动求导,详参见上面的backward函数用法。若一个tensor的requires_grad=True,则依赖其的其他tensor的requires_grad=True,尽管该tensor依赖的其他的tensor的requires_grad=False。

当tensor的requires_grad=False时,反向传播时就不会自动求导了,极大地节约了内存。

而 with torch.no_grad()函数,可以让其间的tensor的requires_grad=False,尽管其依赖的tensor的requires_grad=True。示例如下:

import torch

x = torch.tensor([1, 2, 3], dtype=torch.float, requires_grad=True)
y = torch.tensor([4, 3, 2], dtype=torch.float, requires_grad=False)
z = x + y
print("z.requires_grad:", z.requires_grad)
with torch.no_grad():
    out = x + y
    print("out.requires_grad:", out.requires_grad)
    print("out.grad_fn:", out.grad_fn)
print("out.requires_grad:", out.requires_grad)

结果如下:

z.requires_grad: True
out.requires_grad: False
out.grad_fn: None
out.requires_grad: False

观察可以发现,z的requires_grad=True,而在 with torch.no_grad()语句下,out的requires_grad=False,且out的求梯度的函数grad_fn为空。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值