在 pytorch 中修改预训练模型时,旧的权重会重新初始化吗?
Posted
技术标签:
【中文标题】在 pytorch 中修改预训练模型时,旧的权重会重新初始化吗?【英文标题】:When modifying a pre-trained model in pytorch, does the old weight get re-initialized? 【发布时间】:2021-10-02 20:25:16 【问题描述】:我正在 pytorch 中修改一个预训练的高效网络模型。我正在按顺序执行以下操作:
创建默认模型,加载 imagenet 权重。
然后,改变第一层的通道数,删除几层,增加几层。
from efficientnet_pytorch import EfficientNet
from efficientnet_pytorch.utils import Conv2dStaticSamePadding
PATH = "../input/efficientnet-pytorch/efficientnet-b0-08094119.pth"
model = EfficientNet.from_name('efficientnet-b0')
model.load_state_dict(torch.load(PATH))
# augment model with 4 channels
model._conv_stem = Conv2dStaticSamePadding(4, 32, kernel_size = (3,3), stride = (2,2),
bias = False, image_size = 512)
model._fc = torch.nn.Linear(in_features=1280, out_features=2, bias=True)
我的问题是:我加载的原始砝码会怎样?它会在那里还是所有模型都会被随机初始化?
【问题讨论】:
【参考方案1】:如果您正在重新定义某些层,您似乎正在使用 model._conv_stem
和 model._fc
。然后,是的,这些将被随机初始化,这意味着加载的权重将不再用于这些层。模型的其余部分当然会保持不变,并将使用加载的权重。
【讨论】:
以上是关于在 pytorch 中修改预训练模型时,旧的权重会重新初始化吗?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pytorch 中的预训练权重修改具有 4 个通道作为输入的 resnet 50?