我一直在使用此处提供的代码中的 resnet56 模型:https ://github.com/akamaster/pytorch_resnet_cifar10/blob/master/resnet.py 。
我注意到该实现与许多其他在线可用的 ResNet 示例不同,我想知道 PyTorch 使用 loss() 的反向传播算法是否可以解释提供的代码中的 lambda 层和快捷方式。
如果是这种情况,谁能提供有关 PyTorch 如何解释 lambda 层以进行反向传播的见解(即 PyTorch 如何知道如何区分层的操作)?
PS我还必须修改代码以适合我自己的用例,而且似乎我自己使用选项 == '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))