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

MindSpore中ResNet50适配128x128 ImageNet维度不匹配问题求助

问题原因与解决方案

错误根源

报错For 'MatMul' the input dimensions must be equal, but got 'x1_col': 32768 and 'x2_row': 2048是因为全连接层输入维度与权重维度不匹配:

  • 原适配CIFAR-10的ResNet50,32x32输入经过卷积池化后,最后一层残差模块输出为1x1x2048,展平后正好匹配全连接层要求的2048维度。
  • 改为128x128输入后,最后一层残差模块输出变为4x4x2048,展平后维度是32768(442048),但全连接层仍沿用原2048的输入维度,导致矩阵乘法维度不兼容。

必须修改的模型部分

  • 添加全局平均池化层:在全连接层之前插入nn.GlobalAveragePooling2D()层。该层会将每个通道的特征图(此处为4x4)压缩为1个平均值,输出维度固定为2048,完美匹配原全连接层的输入要求,同时符合ResNet的经典设计。
    示例代码修改:
    # 原模型末尾结构
    self.fc = nn.Dense(2048, num_classes)
    
    # 修改后结构
    self.avg_pool = nn.GlobalAveragePooling2D()
    self.fc = nn.Dense(2048, num_classes)
    
    # 前向传播逻辑调整
    def construct(self, x):
        # ... 原有卷积残差模块计算流程
        x = self.avg_pool(x)
        x = self.fc(x)
        return x
    

额外优化建议(影响精度,非报错原因)

  • 替换数据预处理的均值方差:ImageNet数据集的均值为[0.485, 0.456, 0.406],方差为[0.229, 0.224, 0.225],与CIFAR-10的均值方差不同,需同步修改vision.Normalize的参数。
  • 核对初始卷积层配置:若原CIFAR-10版本使用3x3初始卷积而非ResNet50标准的7x7卷积,建议改回7x7卷积+padding=3,适配更大尺寸的输入图像。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 08:40:56