Matlab - 神经网络 - 如何使用不同的数据集进行训练、验证和测试?

Matlab - neural networks - How to use different datasets for training, validation and testing?

最佳

我有一个关于 Matlab 中的神经网络的问题。

首先,我有一个小型神经网络、2 个输入、1 个隐藏层、10 个神经元和一个输出。这很好用。但我的问题是。我可以确定我的训练日期、验证数据和测试数据吗?

我知道,如果我使用例如net = feedforwardnet(10); 我可以将 整个数据集 分成例如 70/100 15/100 和 15/100。但我不想这样做,因为在这种情况下,我想用 1000 个数据点训练我的神经网络,用另一个数据点验证它们,并使用另一个包含 1000 个数据点的独立数据集来测试它们。换句话说,我想控制这 3 个相互依赖的数据集。

因此,有人可以帮助我吗?

亲切的问候

编辑,我不想使用具有 3000 个数据点的数据集并将 devideParams 设置为 1/3 1/3 和 1/3。

做最好的自己

当您使用 feedforwardnet 时,您可以定义除法参数

net.divideParam.trainRatio = 1/3;
net.divideParam.valRatio = 1/3;
net.divideParam.testRatio = 1/3;

你知道你的数据会被分成3份。 但是你(我)不知道是哪个数据。

但是当你和我通过以下命令行训练我的网络时:

[net,tr]=train(net,x,t); 

然后,tr 将包含所有必要的信息,例如:

tr.trainInd 1x1000 double, 
tr.valInd  1x1000 double, 
tr.testInd  1x1000 double,

因此,例如tr.trainInd,将包含我们用于训练的数据集的所有索引。此外,在 tr 中,我们可以看到 tr.divideFcn 的类型设置在 dividerand 上,这意味着索引是随机选择的。因此,合乎逻辑的是,这些索引有可能不是随机选择的,这意味着,如果我们将两者结合起来。应该可以使用另一个测试集 --> net.divideParam.testRatio = 0 并使用两个不同的训练集和验证集 --> net.divideParam.trainRatio = 1/2net.divideParam.valRatio = 1/2 - 如果你可以设置 tr.divideFcn 按时间顺序排列的东西。最后但同样重要的是,如果这是可能的,那么我们就没什么可做的了,然后将训练集和验证集放入一个数据集中,等等...

向自己问好

默认情况下,它将使用随机索引进行训练、验证和测试。这是手动设置的,但通常不需要默认设置:

net.divideFcn = 'dividerand' 

然后使用上面提到的命令:

net.divideParam.trainRatio = 1/3;
net.divideParam.valRatio = 1/3;
net.divideParam.testRatio = 1/3;

要执行您想要的操作并设置每个索引,您可以执行以下操作:

net.divideFcn = 'divideind'
net.divideParam.trainInd = [1:1000]
net.divideParam.valInd=[1001:2000]
net.divideParam.testInd=[2001:3000]