在 pytorch 中修改预训练模型时,是否会重新初始化旧权重?
When modifying a pre-trained model in pytorch, does the old weight get re-initialized?
我正在修改 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)
我的问题是:我加载的原始权重会怎样?它会在那里还是所有模型都会随机初始化?
如果您正在重新定义某些层,您似乎正在使用 model._conv_stem
和 model._fc
。然后,是的,这些将被随机初始化,这意味着加载的权重将不再用于这些层。模型的其余部分当然会保持不变,并将使用加载的权重。
我正在修改 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)
我的问题是:我加载的原始权重会怎样?它会在那里还是所有模型都会随机初始化?
如果您正在重新定义某些层,您似乎正在使用 model._conv_stem
和 model._fc
。然后,是的,这些将被随机初始化,这意味着加载的权重将不再用于这些层。模型的其余部分当然会保持不变,并将使用加载的权重。