如何可视化loss.backward()期间发生的情况?

时间:2018-10-25 12:05:15

标签: pytorch backpropagation

我对模型的前向通气很有信心,如何控制其后向通气?

这不是关于什么是反向传播的理论问题。这个问题是一个实际的问题,关于是否有工具可以可视化/跟踪/控制反向传播过程中发生的情况。

理想情况下,该工具将可视化模型的计算图的结构(模型操作的图),其输入和可训练的参数。

现在,我要做:

loss.backward()

,我想直观地看到该步骤中发生的情况。

2 个答案:

答案 0 :(得分:1)

这个问题不属于这里,但我仍然会尝试解决。

答案 1 :(得分:0)

已经提到过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)

输出:

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])

进一步,您应该彻底了解 autograd函数(由backward()函数使用)是如何工作的!
这是pytorch网站上的教程,其中有一个简单的示例:

PyTorch: Defining New autograd Functions

希望这会有所帮助!