Neural network gets only 50% good prediction on test data
我创建了一个神经网络,我想将输入数据(每个输入数据 400 个特征)分类为五种阿拉伯语方言之一。我使用
对于网络架构,我使用了两层,第一层有 10 个感知器,第二层有 5、5 个,因为我使用的是 one vs all 策略。
网络训练通常以达到最小梯度结束,而不是 minimux 误差。
我怎样才能让网络预测得更好?泛化是否有问题(网络对训练数据学习得很好,但对新数据的测试往往会失败?
我应该在第一层添加更多感知器吗?我这样问是因为当我在第一层有 10 个感知器时,我需要大约一个小时来训练网络,所以时间会增加。
这是我的网络的代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [Test] = load('testData.mat'); [Ex] = load('trainData.mat'); Ex.trainVectors = Ex.trainVectors'; Ex.trainLabels = Ex.trainLabels'; net = newff(minmax(Ex.trainVectors),[10 5] ,{'logsig','logsig'},'trainlm','learngdm','sse'); net.performFcn = 'mse'; net.trainParam.lr = 0.01; net.trainParam.mc = 0.95; net.trainParam.epochs = 1000; net.trainParam.goal = 0; net.trainParam.max_fail = 50; net.trainFcn = 'trainbr'; net.divideFcn = 'dividerand'; net.divideParam.trainRatio = 0.7; net.divideParam.valRatio = 0.15; net.divideParam.testRatio = 0.15; net = init(net); net = train(net,Ex.trainVectors,Ex.trainLabels); |
谢谢!
使用神经网络是一种创造性的工作。所以没有人能给你唯一真实的答案。但是我可以根据自己的经验给出一些建议。
例如,我发现了关于您的主题的有趣文章:Alberto Sim?es 文章的链接。这就是他们所说的:
Regarding the number of units in the hidden layers, there are some
rules of thumb: use the same number of units in all hidden layers, and
use at least the same number of units as the maximum between the
number of classes and the number of features. But there can be up to
three times that value. Given the high number of features we opted to
keep that same number of units in the hidden layer.
评论中的一些建议:
数据拆分方法(用于训练和测试数据集)取决于您的数据。例如,我处理行业数据,发现数据集的最后一部分技术参数(某些设备的压力)发生了变化。所以我必须获取两种操作模式的数据来训练数据集。但是对于您的情况,我不认为存在相同的问题...我建议您尝试几个随机集(只需检查它们是否真的不同!)。
为了测量净误差,我通常会计算完整的误差向量 - 我训练网络,然后检查它是否适用于所有值以获得整个误差向量。获得一些有用的视图(如直方图等)很有用,我可以看到我的网络哪里出错了。使 sse(或 mse)接近于零是没有必要的,甚至是有害的——通常这意味着你已经过度训练了网络。对于第一个近似值,我通常尝试在训练数据集上获得 80-95% 的正确值,然后在测试数据集上尝试网络。