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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:45:50