笔记笔记
  • Home
  • AI&ML
  • Example
  • Zoo
  • 关于
⌘ K
简单的使用
自动微分
神经网络
图像分类
最后更新时间:
Copyright © 2023-2024 | Powered by dumi | GuoDapeng | 冀ICP备20004032号-1 | 冀公网安备 冀公网安备 13024002000293号

TABLE OF CONTENTS

‌
‌
‌
‌

自动微分 - 回到 PyTorch 笔记

例子

import torch
x = torch.tensor([
[2., 3., ],
[4., 5., ],
], requires_grad=True)
print('==1==')
print(x.requires_grad)
print(x)
print(x.grad)
print('\n==2==')
y = x + 2
print(y)
print('\n==3==')
z = y * y * 3
print(z)
print('\n==4==')
out = z.mean() # 求算数平均值
print(out)
print('\n==5==')
print(x)
out.backward(torch.tensor(1.))
print(x)
print(x.grad)

输出:

==1==
True
tensor([[2., 3.],
[4., 5.]], requires_grad=True)
None
==2==
tensor([[4., 5.],
[6., 7.]], grad_fn=<AddBackward0>)
==3==
tensor([[ 48., 75.],
[108., 147.]], grad_fn=<MulBackward0>)
==4==
tensor(94.5000, grad_fn=<MeanBackward0>)
==5==
tensor([[2., 3.],
[4., 5.]], requires_grad=True)
tensor([[2., 3.],
[4., 5.]], requires_grad=True)
tensor([[ 6.0000, 7.5000],
[ 9.0000, 10.5000]])

另一个例子

import torch
x = y = torch.randn(2, requires_grad=True)
print(x)
print(x.data)
print('==')
while y.data.norm() < 1000: # 张量的标量成分的归一化
y = y * 2
print(y)
print('==')
v = torch.tensor([1., 2.], dtype=torch.float)
print(v)
y.backward(v)
print(x.grad) # TODO 这里比较困惑,x 与 y 的关系

输出:

tensor([ 0.9871, -0.9948], requires_grad=True)
tensor([ 0.9871, -0.9948])
==
tensor([ 1010.7546, -1018.6384], grad_fn=<MulBackward0>)
==
tensor([1., 2.])
tensor([1024., 2048.])