【问题标题】:When modifying a pre-trained model in pytorch, does the old weight get re-initialized?在 pytorch 中修改预训练模型时,旧的权重会重新初始化吗?
【发布时间】:2021-10-02 20:25:16
【问题描述】:

我正在 pytorch 中修改一个预训练的高效网络模型。我正在按顺序执行以下操作:

  1. 创建默认模型,加载 imagenet 权重。

  2. 然后,改变第一层的通道数,删除几层,增加几层。

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)

我的问题是:我加载的原始砝码会怎样?它会在那里还是所有模型都会被随机初始化?

【问题讨论】:

    标签: machine-learning deep-learning neural-network pytorch


    【解决方案1】:

    如果您正在重新定义某些层,您似乎正在使用 model._conv_stemmodel._fc。然后,是的,这些将被随机初始化,这意味着加载的权重将不再用于这些层。模型的其余部分当然会保持不变,并将使用加载的权重。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-10-07
      • 2021-06-08
      • 1970-01-01
      • 2020-10-27
      • 2016-06-29
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多