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

卷积神经网络(CNN)训练报错:输入尺寸不一致求助

解决MATLAB trainNetwork报错:Unexpected input size

错误信息:

Error using trainNetwork
Unexpected input size: All observations must have the same channel and spatial dimension sizes.

即使手动修正了部分图片的尺寸和通道,仍出现该错误,核心原因是imageDatastore未自动统一所有样本的输入规格,或者仍有未处理的异常图片。以下是具体解决步骤:

  • 添加强制预处理函数,统一所有图片规格
    创建一个预处理函数,确保读取的每张图片都转为200x200的RGB格式:

    function img = preprocessImage(img)
        % 统一尺寸为200x200
        img = imresize(img, [200 200]);
        % 灰度图转为RGB
        if size(img, 3) == 1
            img = repmat(img, [1 1 3]);
        end
    end
    

    在创建imageDatastore时指定该读取函数,让所有图片在读取时自动完成预处理:

    imds = imageDatastore(imgDatasetPath, "IncludeSubfolders", true, ...
        "LabelSource", "foldernames", "ReadFcn", @preprocessImage);
    
  • 验证所有图片的规格是否符合要求
    遍历数据集,定位可能存在的异常图片:

    reset(imds);
    while hasdata(imds)
        img = read(imds);
        if ~isequal(size(img), [200 200 3])
            fprintf('异常图片路径:%s\n', imds.Files(imds.CurrentIndex));
        end
    end
    

    根据输出结果检查对应图片,手动修正或移除异常样本。

  • 确认拆分后的数据集继承预处理逻辑
    使用splitEachLabel拆分得到的imdsTrain、imdsVal、imdsTest会自动继承原始imds的预处理规则,无需额外配置,确保训练、验证、测试阶段的输入规格完全一致。

  • 核对输入层与预处理后的尺寸匹配
    确保网络输入层imageInputLayer([200 200 3])的尺寸和通道数,与预处理后的图片规格完全一致,避免因参数不匹配导致报错。

内容的提问来源于stack exchange,提问作者media-preneur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 21:17:07