如何在PyTorch中的网络中初始化权重和偏差(例如,使用He或Xavier初始化)?
我正在使用PyTorch的ResNet152模型。我想从模型中删除最后一个FC层。这是我的代码:
from torchvision import datasets, transforms, models
model = models.resnet152(pretrained=True)
print(model)
Run Code Online (Sandbox Code Playgroud)
当我打印模型时,最后几行如下所示:
(2): Bottleneck(
(conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False)
(bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False)
(bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, track_running_stats=True)
(relu): ReLU(inplace)
)
)
(avgpool): AvgPool2d(kernel_size=7, stride=1, padding=0)
(fc): Linear(in_features=2048, out_features=1000, bias=True)
)
Run Code Online (Sandbox Code Playgroud)
我想从模型中删除最后一个fc层。
我在SO上找到了一个答案(如何在Pytorch中将预训练的FC层转换为CONV层),其中mexmex似乎提供了我正在寻找的答案:
list(model.modules()) # to …Run Code Online (Sandbox Code Playgroud)