入门2,Pytorch深度学习---AUTOGRAD:自动分化学习

import torch #引入torch包

创建一个张量并设置requires_grad=True为跟踪张量

x = torch.ones(2,2,requires_grad=True)
print(x)

出:

tensor([[1., 1.],
        [1., 1.]], requires_grad=True)

进行张量运算:
y = x + 2
print(y)

出:

tensor([[3., 3.],
        [3., 3.]], grad_fn=<AddBackward0>)

y是由于操作而创建的,因此具有grad_fn。
print(y.grad_fn)
出:

<AddBackward0 object at 0x7fe932553cc0>

进行更多操作 y

z = yy3
out =z.mean()
print(z,out)
出:

tensor([[27., 27.],
        [27., 27.]], grad_fn=<MulBackward0>) tensor(27., grad_fn=<MeanBackward0>)

.requires_grad_( … )requires_grad 就地更改现有Tensor的标志。False如果未给出输入标志,则默认为。

a=torch.randa(2,2)
a=((a3)/(a-1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b=(a
a).sum()
print(b.grad_fn)
出:

False
True
<SumBackward0 object at 0x7fe9325699b0>

渐变色

现在让我们反向传播。因为out包含单个标量,out.backward()所以等效于out.backward(torch.tensor(1.))。
out.backward()

打印渐变d(out)/ dx
print(x.grad)

出:

tensor([[4.5000, 4.5000],
        [4.5000, 4.5000]])

在这里插入图片描述
x = torch.randa(3,requires_grad=True)

y=x2
while y.data.norm() < 1000;
y = y
2
print(y)

出:
tensor([-1120.1870, 418.2499, -768.9868], grad_fn=<MulBackward0>)

现在在这种情况下y不再是标量。torch.autograd 无法直接计算完整的雅可比行列式,但是如果我们只想要向量-雅可比积,只需将向量传递给 backward作为参数:
v = torch.tensor([0.1,1.0,0.0001])

y.backward(v)

print(x.grad)

出:

tensor([1.0240e+02, 1.0240e+03, 1.0240e-01])

你还.requires_grad=True可以通过将代码块包装在 with torch.no_grad():

print(x.requires_grad)
print((x**2).requires_grad)

with torch.no_grad():
print((x**2).requires_grad)

出:

True
True
False

或者使用.detach()来获得具有相同内容但不需要渐变的新Tensor:

print(x.requires_grad)
y = x.detach()
print(y.requires_grad)
print(x.eq(y).all)
出:

True
False
tensor(True)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值