You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch模型加载时linear.weight与linear.bias尺寸不匹配问题求助

解决PyTorch模型加载时线性层参数尺寸不匹配问题

问题根源很明确:你用的预训练权重是针对1000分类任务(比如ImageNet数据集)训练的,但当前模型最后一层线性层是8分类,两者参数维度不匹配,导致加载失败。

给你两种实用的解决方法:

方法一:忽略不匹配的参数加载

直接在load_state_dict里加上strict=False,跳过不匹配的层。这种方法简单快速,适合后续要对分类头(linear层)进行微调的场景,不匹配的层会用随机初始化参数。

修改后的代码:

model.to(device)
checkpoint = torch.load("weights/vgg.pth")
if 'state_dict' in checkpoint:
    checkpoint = checkpoint['state_dict']
ckpt = {k.replace('module.', ''):v for k,v in checkpoint.items()}
# 跳过不匹配的参数
model.load_state_dict(ckpt, strict=False)

方法二:手动移除不匹配的参数

明确删除checkpoint里和当前模型不匹配的linear层参数,再加载剩余匹配的部分,还可以手动初始化新的分类头参数,更可控。

代码示例:

model.to(device)
checkpoint = torch.load("weights/vgg.pth")
if 'state_dict' in checkpoint:
    checkpoint = checkpoint['state_dict']
ckpt = {k.replace('module.', ''):v for k,v in checkpoint.items()}

# 删除checkpoint中不匹配的linear层参数
del ckpt['linear.weight']
del ckpt['linear.bias']

# 加载匹配的参数,跳过剩余不匹配项
model.load_state_dict(ckpt, strict=False)

# 可选:手动初始化新的linear层参数(按需使用)
# torch.nn.init.xavier_uniform_(model.linear.weight)
# torch.nn.init.zeros_(model.linear.bias)

内容的提问来源于stack exchange,提问作者Deepak S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 00:55:14