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

PyTorch运行官方示例报错:addmm()参数需为Variable而非torch.FloatTensor

解决PyTorch 0.3.1.post2版本运行官方示例的兼容问题

看起来你踩了PyTorch版本迭代的API差异坑啦!你的问题完全是因为官方文档示例是基于PyTorch 0.4及以上版本编写的,但你用的是0.3.1.post2这个比较老的版本,两者的核心API有不少变化,我来给你拆解问题和解决方案:

第一个报错:RuntimeError: addmm(): argument 'mat1' must be Variable, not torch.FloatTensor

在PyTorch 0.3.x版本中,神经网络层(比如nn.Linear)只能接收Variable类型的数据输入——这是当时PyTorch实现自动微分的核心载体。而0.4+版本已经把Tensor和Variable合并了,直接用torch.randn()生成的普通Tensor就可以自动追踪梯度,不需要手动封装。

所以官方示例里直接用FloatTensor喂给模型,在你的老版本里就会触发类型不匹配的错误。

第二个报错:AttributeError: 'Variable' object has no attribute 'item'

同样是版本差异:item()方法是PyTorch 0.4才新增的,用来从单个元素的Tensor里取出Python数值。而在0.3.x版本中,Variable并没有这个方法,而且当时的普通Tensor也没有item(),要获取Variable中的损失值,你需要先拿到内部的Tensor(通过.data属性),再转成Python数值。

适配老版本的完整修改代码

把官方示例改成兼容0.3.1.post2的写法,只需要两处调整:

  1. 将输入输出张量封装成Variable(注意要导入torch.autograd.Variable)
  2. 把loss.item()替换成老版本支持的取值方式,比如float(loss.data)或者loss.data[0]

修改后的可运行代码如下:

import torch
from torch.autograd import Variable

# 定义参数:批量大小、输入维度、隐藏层维度、输出维度
N, D_in, H, D_out = 64, 1000, 100, 10

# 创建输入输出张量并封装为Variable,y不需要追踪梯度
x = Variable(torch.randn(N, D_in))
y = Variable(torch.randn(N, D_out), requires_grad=False)

# 构建两层神经网络模型
model = torch.nn.Sequential(
    torch.nn.Linear(D_in, H),
    torch.nn.ReLU(),
    torch.nn.Linear(H, D_out),
)

# 定义损失函数:均方误差
loss_fn = torch.nn.MSELoss(size_average=False)

learning_rate = 1e-4
for t in range(500):
    # 前向传播:得到预测值
    y_pred = model(x)

    # 计算损失并打印,替换item()为老版本的取值方式
    loss = loss_fn(y_pred, y)
    print(t, float(loss.data))

    # 清零梯度
    model.zero_grad()

    # 反向传播:计算梯度
    loss.backward()

    # 梯度下降更新参数
    for param in model.parameters():
        param.data -= learning_rate * param.grad.data

额外小建议

如果你的环境允许,强烈建议升级到PyTorch 1.x及以上版本。新版本不仅简化了API(不用再手动处理Variable),还带来了更好的性能、更多的功能,官方文档的示例也都是基于新版本维护的,能避免很多这类版本兼容问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:36:19