【问题标题】:Does PyTorch loss() and backpropagation understand lambda layers?PyTorch loss() 和反向传播是否理解 lambda 层?
【发布时间】:2020-05-06 00:03:32
【问题描述】:

我一直在使用此处提供的代码中的 resnet56 模型:https://github.com/akamaster/pytorch_resnet_cifar10/blob/master/resnet.py

我注意到该实现与网上许多其他可用的 ResNet 示例不同,我想知道 PyTorch 使用 loss() 的反向传播算法是否可以解释提供的代码中的 lambda 层和快捷方式。

如果是这种情况,谁能提供有关 PyTorch 如何解释 lambda 层以进行反向传播的见解(即 PyTorch 如何知道如何区分层的操作)?

附:我还必须修改代码以适应我自己的用例,而且似乎我自己使用选项 == 'A' 的实现并没有产生很好的结果。这可能仅仅是因为 option == 'B',它使用卷积层而不是填充,更适合我的数据。

        self.shortcut = nn.Sequential()
        if stride != 1 or in_planes != planes:
            if option == 'A':
                top = (int) ((self.expansion*planes - in_planes) / 2)
                bot = (self.expansion*planes - in_planes) - top
                self.shortcut = LambdaLayer(lambda x:
                                            F.pad(x[:, :, ::stride, ::stride], (0, 0, 0, 0, top, bot), "constant", 0))

【问题讨论】:

    标签: pytorch backpropagation resnet autograd


    【解决方案1】:

    “我想知道 PyTorch 使用 loss() 的反向传播算法是否可以解释提供的代码中的 lambda 层和快捷方式。”

    PyTorch 通过 lambda 函数进行反向传播没有问题。您的 LambdaLayer 只是将模块的前向传递定义为对 lambda 函数的评估,因此您的问题归结为 PyTorch 是否可以通过 lambda 函数反向传播。

    “如果是这样,谁能提供有关 PyTorch 如何解释 lambda 层以进行反向传播的见解(即 PyTorch 如何知道如何区分层的操作)?”

    lambda 函数在 x 上执行 torch.nn.functional.Pad 函数,我们可以通过它进行打包传播,因为它有一个定义的 backwards() 函数。

    PyTorch 处理 lambda 函数的方式与 PyTorch 等 autodiff 工具处理任何函数的方式相同:它将其分解为原始操作,并使用每个原始操作的微分规则来构建整个计算的导数。

    【讨论】:

      猜你喜欢
      • 2022-06-15
      • 2021-11-20
      • 1970-01-01
      • 2021-06-30
      • 1970-01-01
      • 2020-09-10
      • 1970-01-01
      • 2019-07-24
      • 1970-01-01
      相关资源
      最近更新 更多