Я работал с моделью resnet56 из кода, приведенного здесь: https://github.com/akamaster/pytorch_resnet_cifar10/blob/master/resnet.py.
Я заметил, что реализация отличается от многих других доступных примеров Re sNet в Интернете, и мне было интересно, может ли алгоритм обратного распространения PyTorch, использующий loss (), учесть лямбда-слой и ярлык в предоставленном коде ,
Если это так, может ли кто-нибудь дать представление о том, как PyTorch может интерпретировать лямбда-слой для обратного распространения (т. Е. Как PyTorch узнает, как дифференцировать операции этого слоя)?
PS Мне также пришлось изменить код, чтобы он соответствовал моему собственному сценарию использования, и похоже, что моя собственная реализация с параметром == 'A' не дает хороших результатов. Это может быть просто потому, что опция == '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))