Matlab - 神经网络 - 如何使用不同的数据集进行训练、验证和测试?
Posted
技术标签:
【中文标题】Matlab - 神经网络 - 如何使用不同的数据集进行训练、验证和测试?【英文标题】:Matlab - neural networks - How to use different datasets for training, validation and testing? 【发布时间】: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, how to force the use of certain sets for training, validation and testing?的可能重复 【参考方案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]
【讨论】:
以上是关于Matlab - 神经网络 - 如何使用不同的数据集进行训练、验证和测试?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Matlab 中使用经过训练的神经网络在真实系统中进行分类
LSTM回归预测基于matlab LSTM神经网络回归预测含Matlab源码 2227期