主要内容

最优神经网络训练的数据分割

本主题介绍了一个典型的多层网络工作流的一部分。有关更多信息和其他步骤,请参见多层浅层神经网络和反向传播训练

在训练多层网络时,一般的做法是首先将数据分成三个子集。第一个子集是训练集合,用于计算梯度和更新网络权值和偏差。第二个子集是验证集。在训练过程中监控验证集上的错误。验证错误通常在训练的初始阶段减少,训练集错误也是如此。然而,当网络开始过度拟合数据时,验证集上的错误通常开始上升。网络权值和偏差被保存在验证集误差的最小值。对此技术进行了更详细的讨论改进浅神经网络泛化,避免过拟合

测试在训练过程中不使用集合误差,但是用来比较不同的模型。在训练过程中绘制测试集误差也很有用。如果测试集上的错误在与验证集错误显著不同的迭代数时达到最小值,这可能表明数据集的划分很差。

有四种功能可以将数据划分为训练、验证和测试集。他们是dividerand(默认),divideblockdivideint,divideind.数据划分通常是在训练网络时自动进行的。

函数

算法

dividerand

随机划分数据(默认)

divideblock

将数据分成连续的块

divideint

使用交错选择来分割数据

divideind

将数据除以索引

您可以使用以下属性访问或更改网络的划分功能:

net.divideFcn

每个除法函数都接受自定义其行为的参数。这些值是存储的,可以用以下网络属性更改:

net.divideParam

在训练网络时,自动访问划分函数,并将数据划分为训练、验证和测试子集。如果net.divideFcn被设置为dividerand(默认值),然后使用划分参数将数据随机划分为三个子集net.divideParam.trainRationet.divideParam.valRatio,net.divideParam.testRatio.放置在训练集中的数据的分数为trainRatio/(trainRatio + valRatio + testRatio),其他两组也有类似的公式。训练、测试和验证的默认比率分别是0.7、0.15和0.15。

如果net.divideFcn被设置为divideblock,然后使用原始数据集的三个相邻块将数据分成三个子集(第一个块进行训练,第二个块进行验证,第三个块进行测试)。进入每个子集的原始数据的比例是由相同的三个除法参数决定的dividerand

如果net.divideFcn被设置为divideint,然后用交错的方法分割数据,就像发一副牌一样。这样做是为了让不同百分比的数据进入三个子集。进入每个子集的原始数据的比例是由相同的三个除法参数决定的dividerand

net.divideFcn被设置为divideind,数据除以索引。三个子集的索引由除法参数定义net.divideParam.trainIndnet.divideParam.valIndnet.divideParam.testInd.这些索引的默认赋值是空数组,因此在使用此选项时必须设置索引。