MATLAB中trainNetwork报错:数据存储无效转换函数问题求助
解决Matlab trainNetwork中"Undefined function 'preprocessTrainingData'"错误
错误核心原因
- 你调用的
preprocessTrainingData是自定义预处理函数,但当前Matlab工作区/路径中没有定义这个函数,导致系统无法找到。 - 另外,
combine(imds,pxds)返回的组合数据存储对象,每次读取的data是cell类型(第一个元素为训练图像,第二个为对应标签图),这和未定义的函数预期输入不匹配,进一步触发错误。
具体解决方法
方法1:定义符合要求的preprocessTrainingData函数
在当前工作目录下新建preprocessTrainingData.m文件,写入适配cell输入的预处理逻辑(示例如下,可根据需求调整):
function [processedImg, processedLabel] = preprocessTrainingData(data, targetSize) % 从cell中提取原始图像和标签 rawImg = data{1}; rawLabel = data{2}; % 调整图像和标签到目标尺寸(语义分割需保证两者尺寸完全一致) processedImg = imresize(rawImg, targetSize); % 标签用最近邻插值,避免插值导致类别ID混淆 processedLabel = imresize(rawLabel, targetSize, 'nearest'); % 可选:图像归一化(根据网络需求选择是否添加) processedImg = processedImg / 255; end
完成后确保该文件在Matlab当前路径中,即可正常调用。
方法2:直接用匿名函数嵌入预处理逻辑
如果预处理逻辑简单,无需单独创建函数文件,可直接把逻辑写到transform的匿名函数中:
tds = transform(cds, @(data) deal(... imresize(data{1}, imageSize)/255, ... % 图像调整尺寸+归一化 imresize(data{2}, imageSize, 'nearest') ... % 标签调整尺寸(最近邻插值) ));
验证建议
运行训练代码前,可先手动读取一组数据测试预处理逻辑,确保输出符合网络要求:
sampleData = read(cds); % 测试方法1的函数 [testImg, testLabel] = preprocessTrainingData(sampleData, imageSize); % 检查输出尺寸 disp(size(testImg)); disp(size(testLabel));
内容的提问来源于stack exchange,提问作者A Renton
相关产品推荐
相关产品推荐

