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

PyTorch训练报错:t()期望张量维度≤2,当前为3D的解决方法

问题排查与修复方案

核心错误:Linear层权重维度不合法

报错RuntimeError: t() expects a tensor with <=2 dimensions, but self is 3D的根源是你手动初始化Linear层权重时,错误地将权重张量转为了3D结构:

  • nn.Linear(2,3)的权重标准形状应为(3,2)(输出节点数 × 输入节点数)
  • 你对k1和k2执行了两次unsqueeze操作,导致张量变成(1,1,6)和(1,1,3),赋值给weight后,权重维度变为3D,触发矩阵转置操作时的维度错误。

修复后的模型权重初始化代码:

class MyModel(nn.Module):
    def __init__(self):
        super(MyModel, self).__init__()
        self.d1 = nn.Linear(2,3)
        self.d2 = nn.Linear(3,1)
        self.init_weights()
    
    def init_weights(self):
        # 将k1调整为(3,2)的合法形状
        k1=torch.tensor([0.1,-0.72,0.94,-0.29,0.12,0.44]).view(3,2)
        self.d1.weight.data=k1
        # 将k2调整为(1,3)的合法形状
        k2=torch.tensor([1,-1.16,-0.26]).view(1,3)
        self.d2.weight.data=k2
    
    def forward(self, x):
        x = self.d1(x)
        x = F.tanh(x)
        x = self.d2(x)
        out = F.sigmoid(x)
        return out

其他需修复的问题

1. 损失函数与模型输出不兼容

你使用了CrossEntropyLoss,但模型最后通过sigmoid输出单值,两者不匹配:

  • CrossEntropyLoss适用于多分类任务,输入需为未激活的logits,输出维度等于类别数(二分类时为2)
  • 针对你的二分类任务,建议改用BCEWithLogitsLoss(内置sigmoid计算,无需手动添加),同时调整标签格式:
# 模型forward去掉手动sigmoid
def forward(self, x):
    x = self.d1(x)
    x = F.tanh(x)
    return self.d2(x)

# 替换损失函数
criterion = nn.BCEWithLogitsLoss()

# 训练循环中处理标签:转为float并增加维度匹配输出
labels = labels.float().unsqueeze(1)

2. 重复初始化模型导致优化器失效

代码中先初始化了一次model = MyModel()并绑定了optimizer,之后又重新初始化了一次,导致优化器绑定的是旧模型参数,训练时无法更新新模型。删除第二次初始化代码即可:

# 删除此行:model = MyModel()

3. 日志打印变量未定义

最后打印日志时使用的i未定义,需新增批次计数变量:

for epoch in range(num_epochs):
    train_running_loss = 0.0
    train_acc = 0.0
    batch_count = 0  # 新增批次计数器

    for inputs, labels in trainloader:
        # ... 训练逻辑 ...
        batch_count += 1  # 每批次计数+1
    
    print('Epoch: %d | Loss: %.4f | Train Accuracy: %.2f'%(epoch, train_running_loss / batch_count, train_acc/batch_count))

4. 输入张量类型错误

默认torch.tensor创建的是整数张量,模型需要浮点类型输入,初始化时指定类型:

X=torch.tensor(X1, dtype=torch.float32)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 20:50:24