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

如何为4维权重提供4维输入?PyTorch CIFAR10卷积模型报错解决

问题修正与参数说明

错误原因

你代码的核心问题是forward函数的执行顺序错误:你在第一步就将4维的图像输入(格式为[batch_size, 通道数, 高度, 宽度])直接拉平为2维张量,而Conv2d卷积层要求输入必须是4维结构,因此触发维度不匹配报错。同时原代码中全连接层的输入维度计算也不符合CIFAR10数据集的输入尺寸推导结果。

修正后的模型代码

import torch.nn as nn
import torch.nn.functional as F

class Net2(nn.Module):
    def __init__(self):
        super(Net2, self).__init__()
        # 卷积层:满足32个滤波器、5x5卷积核、步长1的要求
        self.conv1 = nn.Conv2d(3, 32, 5, 1)
        # 推导池化后的特征维度:CIFAR10输入3x32x32 → 卷积后32x28x28 → 池化后32x14x14 → 拉平后为32*14*14=6272
        self.fc1 = nn.Linear(32 * 14 * 14, 512)
        self.fc2 = nn.Linear(512, 10)

    def forward(self, x):
        # 第一步:卷积 + ReLU激活 + 最大池化
        x = F.max_pool2d(F.relu(self.conv1(x)), (2, 2))
        # 第二步:特征拉平为一维,送入全连接层
        x = x.view(x.size(0), -1)
        x = F.relu(self.fc1(x))
        x = self.fc2(x)
        return x

net2 = Net2().to(device)

修正后的代码完全匹配作业要求的6项结构规则。

层参数含义解释

nn.Conv2d 卷积层参数

nn.Conv2d的核心调用格式为 nn.Conv2d(in_channels, out_channels, kernel_size, stride=1, padding=0),各参数含义:

  • in_channels:输入特征图的通道数,CIFAR10是RGB三通道图像,所以填3
  • out_channels:卷积核(滤波器)的数量,作业要求32个,所以填32
  • kernel_size:卷积核的尺寸,填5代表使用5x5的卷积核
  • stride:卷积核在特征图上滑动的步长,作业要求为1
  • padding:输入特征图边缘填充的像素数,默认0即不填充

nn.Linear 全连接层参数

nn.Linear的核心调用格式为 nn.Linear(in_features, out_features),各参数含义:

  • in_features:输入张量的特征维度,第一个全连接层的输入是池化后拉平的特征,所以填321414;第二个全连接层输入是前一层的输出512
  • out_features:输出张量的特征维度,第一个全连接层要求输出512,第二个要求输出10对应CIFAR10的10个分类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 19:36:04