Pytorch修改权重pth文件内容
修改参数值
方法1
dict的类型是collecitons.OrderedDict,是一个有序字典
,直接将新参数名称和初始值作为键值对插入,然后保存即可。
#修改前
dict = torch.load('./ckpt_dir//model_0.pth')
net.load_state_dict(dict)
for name,param in net.named_parameters():
print(name,param)
#按参数名修改权重
dict["forward1.0.weight"] = torch.ones((1,1,3,3,3))
dict["forward1.0.bias"] = torch.ones(1)
torch.save(dict, './ckpt_dir//model_0_.pth')
#验证修改是否成功
net.load_state_dict(torch.load('./ckpt_dir//model_0_.pth'))
for param_tensor in net.state_dict():
print(net.state_dict()[param_tensor])
方法2(按条件修改)
net.load_state_dict(torch.load('./ckpt_dir//model_0.pth'))
for param_tensor in net.state_dict():
print(net.state_dict()[param_tensor])
#按条件修改权重
for param in net.parameters():
new = torch.zeros_like(param.data)
param.data = torch.where(0, param.data, new)
#验证是否真的修改了权重值。
for param_tensor in net.state_dict():
print(net.state_dict()[param_tensor])
修改参数名
dict = torch.load(model_dir)
older_val = dict['旧名']
# 修改参数名
dict['新名'] = dict.pop('旧名')
torch.save(dict, './model_changed.pth')
#验证修改是否成功
changed_dict = torch.load('./model_changed.pth')
print(old_val)
print(changed_dict['新名'])
添加参数层
dict = torch.load('./ckpt_dir//model_0.pth')
print(dict)
dict['forward1.0.weight1'] = None #把OrderedDict类型的dict当作普通字典使用即可
print(dict)
删除参数层
pre_model = "./results/model_2-9.pth"
dict = torch.load(pre_model)
for key in list(dict.keys()):
if key.startswith('decoder1'):
del dict[key]
torch.save(dict, './model_deleted.pth')
# # #验证修改是否成功
changed_dict = torch.load('./model_deleted.pth')
for key in dict.keys():
print(key)
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App