卷积神经网络(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
相关产品推荐
相关产品推荐

