神经网络中的输出问题(在 MATLAB 的神经网络工具箱中)

Posted

技术标签:

【中文标题】神经网络中的输出问题(在 MATLAB 的神经网络工具箱中)【英文标题】:Problems with outputs in neural networks (in MATLAB's neural networks toolbox) 【发布时间】:2014-01-02 05:33:18 【问题描述】:

我在 MATLAB 中使用 652,500 个数据点训练了我的 artificial neural network (ANN),在另一个盲测(652,100 个数据点 - 对于全新的输入数据集)中,输出非常好(如我所愿)。但是当我插入的数据量非常少(例如,低于 50 个数据点)时,就会出现问题。输出很意外,我检查了很多次。

更准确地说,训练阶段包含 10% 的数据用于训练,45% 用于验证,45% 用于测试。训练非常成功,对于大量的新输入数据,效果非常好。问题是当非常有限的数据(与训练数据点相比)被插入神经网络时,它显示出非常不切实际的输出,超出了训练的范围。

为什么会这样?有人可以在这个问题上点亮一些棚子吗?

另外请提一下,对于训练和最终测试数据点是否有任何严格的(硬性和快速的)规则?例如:应该/必须在新的输入数据集中引入多少百分比的训练数据。我想问题是我的网络高估或低估了输出,因为与训练阶段相比,它接收到的数据百分比非常低。

【问题讨论】:

在您拆分训练/验证/测试之前尝试改组数据,并查看该行为是否反复出现。可能是在“数据有限”的情况下,数据空间没有正确覆盖用于测试的数据,并且当您有更多数据进行测试时,这些错误在平均值中被其他错误“掩盖”。跨度> 我理解你的逻辑,非常感谢。我的数据集已经洗牌了。 【参考方案1】:

您的问题是在训练期间过度拟合数据集。数据划分是神经网络训练中一项非常重要的任务。一般来说,更科学的,训练集的百分比应该在70-80%之间。测试和验证集应各占 10-15% 左右。例如:

net.divideParam.trainRatio = 70/100;
net.divideParam.valRatio = 15/100;
net.divideParam.testRatio = 15/100;

你想象一个学生在课堂上。 TrainRatio 是学生应该学习的材料/讲座。 ValRatio为期中考试应考材料比例,TestRatio为期末考试应考材料比例。所以,如果你没有足够的培训材料,学生就不可能在期中考试和期末考试中取得成功。清楚吗?神经网络适用于这样一个简单的学生进行学习/训练。因此,您的网络面临过拟合问题。

【讨论】:

我也知道这个数据划分问题。即使使用 70% 的数据进行训练,它也无法为很少的新输入数据集提供良好的输出。值得一提的是,我的网络没有过拟合问题,因为我在 matlab 中使用了一些函数,这有助于在发生任何过拟合和欠拟合时停止网络。 除了正确训练我的模型外,我还会检查新的输入数据(大量数据库),并且效果很好。但是每当我提供一些数据点(例如少于 50 个)时,它都会显示异常输出。这种特殊情况是我面临的问题。 在 NN 中,任何事情都取决于训练阶段。您是否有信心支持数据集中所有类型的数据?我的意思是,如果您的测试数据集在训练阶段包含一些未经训练的数据,那么您将无法获得好的结果。如果是这样,则不能应用 NN,而应专注于聚类建模。您的测试数据集应该接近训练数据集的结构,否则,NN 对于这种类型的训练很弱。 另外,你的训练/验证/测试集的划分模式是什么?随机的?如您所知,随机划分是最合适的划分。 感谢您的 cmets。在我的例子中,数据划分方法是随机的,并且网络只有很少的功能(在 Matlab 的 ANN 工具箱中)可以控制一些功能,例如:停止过拟合、不拟合和提前停止。通过使用这些,我得到了很好的输出,即使 10% 的数据用于训练。

以上是关于神经网络中的输出问题(在 MATLAB 的神经网络工具箱中)的主要内容,如果未能解决你的问题,请参考以下文章

MATLAB 中的神经网络

MATLAB中神经网络建模中的归一化和非归一化

MATLAB 中的神经网络,初始权重

将 Matlab 神经网络转换为 C++ 神经网络

运用matlab解决bp神经网络多个输入一个输出的问题

Matlab中的前馈神经网络分类