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

修改预训练模型pre-trained model参数时两次打印参数和结果一致如何解决

问题原因
  • 代码中x = x/100属于变量重赋值操作,没有修改原模型参数的存储内容:执行x = i.data时,x仅持有i.data的内存引用,后续的除法运算生成了新的张量对象,你将新对象赋值给x只是改变了x的指向,不会修改原参数i的实际值。
  • 直接操作参数的.data属性是PyTorch的不推荐用法,易引发计算图相关的隐藏问题。
修复方案

你可以选择以下任意一种方法修改,都能实现参数值的改动:

  1. 最小改动适配你的现有逻辑,用切片赋值实现原地修改:
ids = [int(p.sum().item()) for p in model.parameters()]
print(ids[0])

for i in model.parameters():
    x = i.data
    x[:] = x/100 # 切片赋值会修改原张量的内存内容,而非重定义x变量
    break

ids = [int(p.sum().item()) for p in model.parameters()]
print(ids[0])
  1. 更规范的PyTorch写法,使用torch.no_grad()避免计算图被意外修改:
import torch

ids = [int(p.sum().item()) for p in model.parameters()]
print(ids[0])

with torch.no_grad():
    for i in model.parameters():
        i.div_(100) # 带下划线的方法是PyTorch的原地操作,直接修改参数值
        break

ids = [int(p.sum().item()) for p in model.parameters()]
print(ids[0])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 10:45:04