【问题标题】:Matlab - neural networks - How to use different datasets for training, validation and testing?Matlab - 神经网络 - 如何使用不同的数据集进行训练、验证和测试?
【发布时间】:2015-06-09 10:10:13
【问题描述】:
最好的
我有一个关于 Matlab 中的神经网络的问题。
首先,我有一个小型神经网络,2 个输入,1 个隐藏层,10 个神经元和一个输出。这很好用。但我的问题是。我可以确定我的训练日期、验证数据和测试数据吗?
我知道,如果我使用例如net = feedforwardnet(10); 我可以将我的整体数据集划分为例如 70/100 15/100 和 15/100。但我不想这样做,因为在这种情况下,我想用 1000 个数据点训练我的 NN,用另一个数据点验证它们,并使用另一个包含 1000 个数据点的独立数据集来测试它们。换句话说,我想控制这三个相互依赖的数据集。
那么,有人可以帮帮我吗?
亲切的问候
编辑,我不想使用具有 3000 个数据点的数据集,并将 devideParams 设置为 1/3 1/3 和 1/3。
【问题讨论】:
标签:
matlab
neural-network
【解决方案1】:
最好的自己
当您使用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/2 和 net.divideParam.valRatio = 1/2 - 如果您可以将 tr.divideFcn 设置为按时间顺序排列的东西。最后但并非最不重要的一点,如果这是可能的,那么我们无事可做,然后将训练和验证集放在一个数据集中,等等......
向我问好
【解决方案2】:
默认情况下,它将使用随机索引进行训练、验证、测试。这是手动设置的,但通常不需要:
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]