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

如何在Fashion-MNIST数据集上实现MobileNetV2?通道不匹配报错求解

报错核心原因

你遇到的报错是输入数据和模型要求的输入规格不匹配导致的,具体存在两个不兼容点:

  1. 通道数不匹配:Fashion-MNIST数据集是单通道灰度图,你输入模型的张量维度是[100, 1, 28, 28],第二个维度是1代表单通道;但你实现的MobileNetV2第一层卷积的输入通道数固定为3(适配RGB三通道图像),卷积核权重维度是[32, 3, 3, 3],要求输入必须有3个通道,因此触发维度不匹配报错。
  2. 输入分辨率不匹配:MobileNetV2默认输入分辨率为224x224,且要求输入尺寸必须是32的倍数,而Fashion-MNIST的图像尺寸是28x28,不符合要求,就算解决了通道问题,后续多次下采样后特征图尺寸会变为0,还会触发新的报错。
可行解决方案

你可以根据自己的需求选择以下任意一种方案:

方案1:修改网络适配Fashion-MNIST输入(推荐,计算量更小)

  • 修改第一层卷积的输入通道数:将MobileNetV2类__init__方法中构建第一层的代码
self.features = [conv_bn(3, input_channel, 2)]

修改为

self.features = [conv_bn(1, input_channel, 1)]

把输入通道改为1,同时把第一层步长从2改为1,减少下采样幅度。

  • 调整倒残差块的下采样配置:把interverted_residual_setting列表里的步长参数适当修改,减少下采样次数,比如把前两个s=2的项改为s=1,保证经过所有下采样层后特征图尺寸为正整数。
  • 调整模型输出配置:初始化模型时关闭预训练权重加载(预训练权重是三通道ImageNet训的,和修改后的网络不兼容),同时将分类头类别数改为10:
model = MobileNetV2(n_class=10, input_size=28)
# 不要调用带pretrained=True的mobilenet_v2函数,避免加载不匹配的预训练权重
  • 训练代码优化:PyTorch 0.4版本之后Variable已经被弃用,直接使用Tensor即可,不需要套Variable()包装。

方案2:修改输入数据适配原网络结构

如果不想改动MobileNetV2的原生结构,可以在数据预处理阶段修改输入规格:
在构建train_loader和test_loader的transform中添加两个操作:

  1. 把单通道灰度图转为3通道:transforms.Grayscale(num_output_channels=3)
  2. 把28x28的图像resize到224x224:transforms.Resize(224)
    这种方案不需要改网络代码,但计算量会大幅提升,训练速度会变慢。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 12:33:01