当我开始使用人工神经网络 (NN) 时,我认为我必须将过度拟合作为主要问题。但在实践中,我什至无法让我的神经网络通过 20% 的错误率障碍。我什至无法在随机森林中击败我的分数!
我正在寻求一些非常笼统或不那么笼统的建议,说明应该如何使 NN 开始捕捉数据趋势。
为了实现 NN,我使用 Theano Stacked Auto Encoder 和教程中的代码,该代码在对 MNIST 数据集进行分类时效果很好(错误率低于 5%)。它是一个多层感知器,顶部有 softmax 层,每个隐藏层稍后都被预训练为自动编码器(在教程第 8 章中有详细描述)。有大约 50 个输入特征和大约 10 个输出类。NN 具有 sigmoid 神经元,所有数据都归一化为 [0,1]。我尝试了很多不同的配置:隐藏层的数量和其中的神经元(100->100->100、60->60->60、60->30->15 等),不同的学习和预训练费率等
我能得到的最好的结果是验证集的错误率是 20%,测试集的错误率是 40%。
另一方面,当我尝试使用随机森林(来自 scikit-learn)时,我很容易在验证集上得到 12% 的错误率,在测试集上得到 25%(!)。
我的预训练深度神经网络怎么会表现得如此糟糕?我应该尝试什么?