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

如何修改预训练模型checkpoint.pt以适配输入维度从9改为55?

解决预训练模型输入/输出维度调整后的权重不匹配问题

问题根源

报错的核心是模型结构修改后,全连接层的权重、偏置形状与checkpoint中的预训练参数不匹配:

  • fc.0.weight:原输入维度为9,对应权重形状[1600,9];新输入维度改为55,需要权重形状为[1600,55]
  • fc.6.weight:原输出维度为9,对应权重形状[9,400];新输出维度改为55,需要权重形状为[55,400]
  • fc.6.bias:原输出维度为9,偏置形状[9];新输出维度改为55,需要偏置形状为[55]

解决步骤

你需要加载原checkpoint,手动调整不匹配参数的形状,再保存新的checkpoint或直接加载到修改后的模型中。以下是具体实现:

1. 加载原checkpoint

import torch

# 加载原checkpoint文件(若你的checkpoint直接存储state_dict,可改为state_dict = torch.load("checkpoint.pt"))
checkpoint = torch.load("checkpoint.pt")
state_dict = checkpoint["state_dict"]

2. 修改不匹配的参数

处理输入层权重fc.0.weight

保留原9维的预训练权重,新增的46维用PyTorch线性层默认的kaiming均匀初始化:

old_fc0_weight = state_dict["fc.0.weight"]
# 初始化新增维度的权重
new_fc0_weight = torch.nn.init.kaiming_uniform_(torch.empty(1600, 55 - 9))
# 拼接原权重与新权重,扩展列数
state_dict["fc.0.weight"] = torch.cat([old_fc0_weight, new_fc0_weight], dim=1)

处理输出层权重fc.6.weight

保留原9行的预训练权重,新增的46行同样用kaiming初始化:

old_fc6_weight = state_dict["fc.6.weight"]
new_fc6_weight = torch.nn.init.kaiming_uniform_(torch.empty(55 - 9, 400))
# 拼接原权重与新权重,扩展行数
state_dict["fc.6.weight"] = torch.cat([old_fc6_weight, new_fc6_weight], dim=0)

处理输出层偏置fc.6.bias

保留原9个偏置值,新增的46个偏置初始化为0(PyTorch线性层默认偏置初始化规则):

old_fc6_bias = state_dict["fc.6.bias"]
new_fc6_bias = torch.zeros(55 - 9)
# 拼接原偏置与新偏置
state_dict["fc.6.bias"] = torch.cat([old_fc6_bias, new_fc6_bias], dim=0)

3. 保存新checkpoint或加载到模型

保存修改后的checkpoint

torch.save({"state_dict": state_dict}, "modified_checkpoint.pt")

直接加载到修改后的模型

from your_model_module import Network  # 导入你的模型类

model = Network()
# 此时参数形状完全匹配,可使用strict=True加载
model.load_state_dict(state_dict, strict=True)

注意事项

  • 新增维度的初始化方式可按需调整:如果新增特征与原有特征分布类似,可基于原权重的均值/方差初始化;若无相关先验,使用PyTorch默认初始化即可。
  • 若原checkpoint存储的是整个模型对象而非单独的state_dict,需先通过model.state_dict()提取参数字典再进行修改。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 17:37:13