繁体   English   中英

如何训练 PyTorch 中的共享层

[英]How to train the Shared Layers in PyTorch

我有以下代码

import torch
import torch.nn as nn
from torchviz import make_dot, make_dot_from_trace

class Net(nn.Module):
    def __init__(self, input, output):
        super(Net, self).__init__()
        self.fc = nn.Linear(input, output)

    def forward(self, x):
        x = self.fc(x)
        x = self.fc(x)
        return x

model = Net(12, 12)
print(model)

x = torch.rand(1, 12)
y = model(x)
make_dot(y, params = dict(model.named_parameters()))

在这里,我在forward中重用了self.fc两次。

计算图是看

在此处输入图像描述

我对计算图感到困惑,我很好奇如何在反向传播中训练这个 model? 在我看来,渐变将永远存在于一个循环中。 非常感谢。

您的图表没有问题。 您可以像任何其他前馈 model 一样训练它。

  1. 关于循环:由于它是有向无环图,因此没有实际循环(查看箭头方向)。
  2. 关于反向传播:让我们考虑fc.bias参数。 由于您重复使用同一层两次,因此偏差有两个向外的箭头(用于网络的两个地方)。 在反向传播阶段,方向是相反的:偏差会从两个地方得到梯度,这些梯度会加起来。
  3. 关于图: FC 层可以表示为: Addmm(bias, x, T(weight) ,其中T是转置, Addmm是矩阵乘法加上向量。因此,您可以看到数据( weightbias )如何被传递给函数( AddmmT

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM