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

Matlab神经网络训练报错:Inputs and targets样本数不一致如何解决?

解决MATLAB神经网络训练时“Inputs and targets have different numbers of samples”报错

嘿,这个问题我之前也踩过坑!核心原因是MATLAB神经网络对输入/目标数据的维度要求和你现在的Excel读取结果完全相反,再加上你的newff参数还有两处明显错误,咱们一步步来修正:

问题根源拆解

  1. 数据维度不匹配
    你从Excel读出来的x是22行(样本数)×4列(特征数)的矩阵,y是22行×3列(输出标签数)的矩阵,但MATLAB的train函数要求:

    • 输入x必须是 特征数 × 样本数 的矩阵(也就是4×22)
    • 目标y必须是 输出标签数 × 样本数 的矩阵(也就是3×22)
      直接用原始数据训练,函数会把行当成样本数,自然会报“样本数不同”的错。
  2. 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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 06:59:24