路缘石密网覆盖

2024-04-19 21:48:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用keras从加速度计信号构建一个活动分类器。然而,即使是最简单的模型,我也在经历数据的过度拟合。在

输入数据为形状(10,3),包含大约0.1秒来自加速度计的三维数据。模型很简单

model = Sequential()
model.add(Flatten(input_shape=(10,3)))
model.add(Dense(2, activation='softmax'))
model.compile(optimizer='adam', loss='binary_crossentropy', metrics=['accuracy'])

对于步行活动,模型应输出标签[1,0],对于非步行活动,应输出标签[0,1]。经过训练,我得到99.8%的准确率(如果它是真的…)。当我试图预测未用于培训的数据时,我得到了50%的准确率,验证了除了预测单个类值之外,网络并没有真正“学习”任何东西。在

数据是从100hz三轴加速度计信号准备的。我不会以任何方式对数据进行预处理,除了将其窗口化到长度为10的箱子中,这些箱子与前一个箱子重叠50%。我可以采取什么措施使网络产生实际的预测?我试过增大窗口大小,但结果保持不变。如有任何建议/一般提示,我们将不胜感激。在

伊恩


Tags: 数据模型网络addmodel信号分类器标签
2条回答

过拟合问题是由输入数据类型引起的。传递给分类器的值应该是带2位小数的浮点值。在这个过程中的某个地方,这些值中的一些已经被放大,并且明显超过了小数点后2位。也就是说,输入应该看起来像

[9.81, 10.22, 11.3]

但是看起来像

^{pr2}$

分类器基于此特征进行预测,这显然不是期望的行为!课程学习-确保数据准备一致!感谢@umutto对随机森林的建议,简单的结构有助于诊断目的。在

尝试添加一些隐藏层和退出层到你的网络。您可以创建一个简单的Multi Layer Perceptron (MLP),在平坦层和密集层之间添加几行:

model.add(Dense(64, activation='relu', input_dim=30))
model.add(Dropout(0.25))
model.add(Dense(64, activation='relu'))
model.add(Dropout(0.1))

Or check out this guide.它解释了如何创建一个简单的MLP。在

没有任何隐藏层,你的模型实际上不会从输入数据中“学习”,而是将输入的特征数映射到输出的特征数。在

添加的层越多,它就应该从输入数据中提取出更多的中间特性和模式,从而为测试数据提供更好的模型预测。由于层数过多会导致过度拟合,因此要设计出最佳的模型会有很多尝试和错误。在

您没有提供有关如何训练模型的信息,因此这也可能是问题的原因。您必须确保将数据放入培训、测试和验证集。用于培训、验证和测试数据的一些可能的分割比为:60%:20%:20%,或70%:15%:15%。这最终也是你必须决定的。在

相关问题 更多 >