PyTorch loss()和反向传播是否了解lambda层?

PyTorch loss()和反向传播是否了解lambda层?,pytorch,backpropagation,resnet,autograd,Pytorch,Backpropagation,Resnet,Autograd,我一直在使用resnet56模型,代码如下: 我注意到该实现与许多其他在线可用的ResNet示例不同,我想知道PyTorch使用loss()的反向传播算法是否可以解释所提供代码中的lambda层和快捷方式 如果是这种情况,是否有人能够深入了解Pytork如何解释lambda层进行反向传播(即Pytork如何知道如何区分层的操作) 另外,我还必须修改代码以适应我自己的用例,而且我自己的option='A'实现似乎不能产生很好的结果。这可能只是因为option=='B'使用卷积层而不是填充,更适合我

我一直在使用resnet56模型,代码如下:

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

如果是这种情况,是否有人能够深入了解Pytork如何解释lambda层进行反向传播(即Pytork如何知道如何区分层的操作)

另外,我还必须修改代码以适应我自己的用例,而且我自己的option='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使用loss()的反向传播算法是否可以解释所提供代码中的lambda层和快捷方式。”

PyTorch在通过lambda函数进行反向传播时没有问题。您的lambdlayer只是将模块的正向传递定义为lambda函数的求值,因此您的问题归结为PyTorch是否可以通过lambda函数反向传播

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

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

PyTorch处理lambda函数的方式与PyTorch等autodiff工具处理任何函数的方式相同:它将lambda函数分解为基本运算,并使用每个基本运算的微分规则来建立整个计算的导数