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

PyTorch搭建AutoEncoder执行mm矩阵乘法报THTensor.cpp越界错误

问题原因排查与解决方法
  • 首先确认索引取值范围合法
    你已经排除了索引为-1的情况,但还要确认索引最大值不超过self.linear1.weight的列数减一。nn.Linear的权重形状为(输出特征数, 输入特征数),你是按列取权重,所以batch_item_index里的所有值必须落在[0, self.linear1.weight.size(1)-1]区间内,超过最大值也会触发越界报错。你可以在索引取值前加一行校验代码确认范围:
idx = T.LongTensor(batch_item_index[0].astype(np.int32))
print("索引范围:", idx.min().item(), idx.max().item(), "权重列数:", self.linear1.weight.size(1))
  • 其次校验矩阵乘法维度匹配
    mm方法严格要求两个输入都是二维张量,且第一个张量的列数等于第二个张量的行数。你可以在报错行前打印两个张量的形状确认匹配性:
print("item_vector转置后形状:", item_vector.t().shape)
print("linear4权重转置后形状:", self.linear4.weight.t().shape)

比如item_vector.t()的形状为(batch_size, 隐藏层维度),那么self.linear4.weight.t()的形状必须为(隐藏层维度, 输出维度)才能完成矩阵乘法,维度不匹配就会触发当前报错。

  • 最后确认模型初始化参数是否正确
    你初始化AutoEncoder时传入的输出维度为num_items,需要确认linear4层的输出特征数和该参数一致,避免线性层维度和预期不符导致权重形状错误。

另外你使用的是2018年编译的PyTorch 0.x老版本,该版本对张量类型、维度的校验规则比较严格,上述问题在新版本中会有更明确的报错提示,条件允许可以升级PyTorch版本降低排查成本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 04:06:05