Tom*_*Tom 6 backpropagation pytorch
我对我的模型的前向传递有信心,我如何控制它的后向传递?
这不是一个关于什么是反向传播的理论问题。这是一个实用的问题,即是否有适合可视化/跟踪/控制反向传播期间发生的情况的工具。
理想情况下,该工具将允许可视化模型的计算图的结构(模型操作的图)、其输入及其可训练参数。
现在,我这样做:
loss.backward()
Run Code Online (Sandbox Code Playgroud)
我想想象一下这一步会发生什么。
blu*_*nox 10
已经提到过它pytorchviz
可以让您可视化图表。
这是一个小示例,可以帮助您了解如何pytorchviz
使用以下命令跟踪图形grad_fn
:
import torch
from torch import nn
d = 5
x = torch.rand(d, requires_grad=True)
print('Tensor x:', x)
y = torch.ones(d, requires_grad=True)
print('Tensor y:', y)
loss = torch.sum(x*y)*3
del x
print()
print('Tracing back tensors:')
def getBack(var_grad_fn):
print(var_grad_fn)
for n in var_grad_fn.next_functions:
if n[0]:
try:
tensor = getattr(n[0], 'variable')
print(n[0])
print('Tensor with grad found:', tensor)
print(' - gradient:', tensor.grad)
print()
except AttributeError as e:
getBack(n[0])
loss.backward()
getBack(loss.grad_fn)
Run Code Online (Sandbox Code Playgroud)
输出:
Tensor x: tensor([0.0042, 0.5376, 0.7436, 0.2737, 0.4848], requires_grad=True)
Tensor y: tensor([1., 1., 1., 1., 1.], requires_grad=True)
Tracing back tensors:
<MulBackward object at 0x1201bada0>
<SumBackward0 object at 0x1201bacf8>
<ThMulBackward object at 0x1201bae48>
<AccumulateGrad object at 0x1201badd8>
Tensor with grad found: tensor([0.0042, 0.5376, 0.7436, 0.2737, 0.4848], requires_grad=True)
- gradient: tensor([3., 3., 3., 3., 3.])
<AccumulateGrad object at 0x1201bad68>
Tensor with grad found: tensor([1., 1., 1., 1., 1.], requires_grad=True)
- gradient: tensor([0.0125, 1.6129, 2.2307, 0.8211, 1.4543])
Run Code Online (Sandbox Code Playgroud)
此外,您一定应该了解autograd 函数(由backward()
-function 使用)实际上是如何工作的!
这是来自 pytorch 网站的教程,其中包含一个简单而简短的示例:
希望这个对你有帮助!
归档时间: |
|
查看次数: |
11363 次 |
最近记录: |