【发布时间】:2017-12-17 18:20:51
【问题描述】:
我正在使用 Python 和 Keras 库训练神经网络模型。
我的模型测试准确率很低(60.0%),我尝试了很多方法来提高它,但我做不到。我正在使用 DEAP 数据集(总共 32 名参与者)来训练模型。我使用的拆分技术是固定的。如下:培训28人,验证2人,测试2人。
对于我使用的模型如下。
- 顺序模型
- 优化器 = Adam
- 使用 L2_regularizer、高斯噪声、dropout 和批量归一化
- 隐藏层数 = 3
- 激活 = relu
- 编译损失 = categorical_crossentropy
- 初始化器 = he_normal
现在,我正在使用训练测试技术(也修复了一项)来拆分数据,我得到了更好的结果。然而,我发现一些参与者正在以负面的方式影响训练的准确性。因此,我想知道是否有办法研究每个数据(参与者)对模型准确性(性能)的影响?
最好的问候,
【问题讨论】:
-
不知道你的模型的细节,但是一个有 32 个条目的数据集对于神经网络来说似乎真的很小,也许你应该更简单一些。训练验证测试是获得无偏结果的方法,但如果您不进行超参数调整,训练测试拆分应该没问题。虽然不应该改变太多的准确性(可能是由于数据集小),如果你愿意,你可以尝试像 k-fold 交叉验证这样的东西,它会使用你的所有数据进行训练。您可以使用异常检测等.. 来查找和消除不良数据.. 但是由于您已经有一个小数据集,也许可以找到一种方法来填充它?
-
感谢@umutto的回答,我忘了说每个参与者有40次试验,因此,数据集的总大小是(1280 x 503),其中503是特征数.我已经尝试过 k 折,它也给出了一个小的准确性,说明我为什么要寻找坏数据。增加噪声或复制数据不是小数据集的解决方案之一吗?
-
您的问题过于宽泛,实际提供的信息很少。为了让其他人能够帮助您,请参阅“如何创建最小、完整且可验证的示例”stackoverflow.com/help/mcve
-
1280 仍然很小(尤其是 503 特征)但应该可以工作,您的网络至少应该是过拟合的。通过良好的正则化方法,您可以获得更好的结果。你的训练准确率如何?也是的,添加噪音,创建人工数据很有帮助,但我不确定哪种数据增强方法对您的数据集有用,我想您可以从一些噪音开始看看。交叉验证、训练测试拆分与您测量结果的方式有关,尽管糟糕的实施可能会产生误导性结果,但您应该专注于超参数。
-
@umutto 是的,它仍然很小,当我使用更多功能时,我没有得到更好的结果。是的,数据中存在过度拟合,我尝试使用 dropout 和 L2 正则化来解决它。正如我所说,现在我正在使用训练-测试拆分技术(80% 训练,20% 测试),测试的准确率提高到 68%,训练的准确率提高到 66%。我尝试使用 k 倍拆分对超参数进行网格搜索,但我得到的更高准确度是 60%。
标签: python machine-learning neural-network keras training-data