Matlab神经网络训练报错:Inputs and targets样本数不一致如何解决?
解决MATLAB神经网络训练时“Inputs and targets have different numbers of samples”报错
嘿,这个问题我之前也踩过坑!核心原因是MATLAB神经网络对输入/目标数据的维度要求和你现在的Excel读取结果完全相反,再加上你的newff参数还有两处明显错误,咱们一步步来修正:
问题根源拆解
数据维度不匹配
你从Excel读出来的x是22行(样本数)×4列(特征数)的矩阵,y是22行×3列(输出标签数)的矩阵,但MATLAB的train函数要求:- 输入
x必须是 特征数 × 样本数 的矩阵(也就是4×22) - 目标
y必须是 输出标签数 × 样本数 的矩阵(也就是3×22)
直接用原始数据训练,函数会把行当成样本数,自然会报“样本数不同”的错。
- 输入
newff参数错误- 你设置的输出层节点数是
1,但你有3个输出标签,这完全不匹配,输出层节点数必须等于标签数(也就是3) - 你把训练函数
trainlm放到了激活函数数组里,newff的正确语法是:net = newff(输入范围, 层节点数数组, 激活函数数组, 训练函数),激活函数数组的长度要和层节点数数组的长度一致。
- 你设置的输出层节点数是
修正后的完整代码
clc; close all; clear all; filename = 'D:\Raneen.xlsx'; sheet = 1; xlRange = 'A2:D23'; ylRange = 'E2:G23'; % 读取原始数据 x = xlsread(filename,sheet,xlRange); y = xlsread(filename,sheet,ylRange); % 关键操作:转置数据,匹配MATLAB神经网络的维度要求 x = x'; % 现在x是4×22(特征数×样本数) y = y'; % 现在y是3×22(输出标签数×样本数) % 修正newff参数:20节点隐藏层+3节点输出层,对应激活函数,指定训练函数trainlm net = newff(minmax(x), [20, 3], {'logsig', 'purelin'}, 'trainlm'); % 训练参数保持你的设置 net.trainparam.epochs = 8000; net.trainparam.goal = 1e-25; net.trainparam.lr = 0.01; % 正常训练网络 net = train(net, x, y); y_net = net(x);
验证小技巧
在转置后可以用size(x)和size(y)查看维度,确认size(x,2)和size(y,2)的数值都是22(也就是样本数),这样就彻底解决了样本数不匹配的问题。
内容的提问来源于stack exchange,提问作者user11791503
相关产品推荐
相关产品推荐

