【发布时间】:2018-06-27 01:09:13
【问题描述】:
我正在尝试使用 keras 从加速度计信号构建活动分类器。但是,即使使用最简单的模型,我也遇到了数据的极度过度拟合。
输入数据的形状为 (10,3),包含来自加速度计的大约 0.1 秒的 3 维数据。模型很简单
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 的 bin 中,这些 bin 与前一个 bin 重叠 50%。我可以采取哪些措施来使网络产生实际的预测?我尝试增加窗口大小,但结果保持不变。非常感谢任何建议/一般提示。
伊恩
【问题讨论】:
-
你有多少训练样例?拟合模型时是否使用交叉验证?您的课程是否在某些方面存在偏见或偏差?你对你的训练/测试集进行分层吗?通常你会使用正则化(l1、l2、dropout 等)来控制过度拟合,但是对于一个很小的模型(并且仍然是过度拟合),它不会产生任何影响。我觉得数据还有另一个问题。您是否尝试过逻辑回归、随机森林等更简单的模型?
-
@umutto 大约有 25k 个训练示例,并且正在使用 0.25 的验证拆分。我在我创建的一些更复杂的模型中使用了 dropout,但为了简单起见,我故意将其省略。我现在将使用随机森林方法,并将更新任何新信息。
-
我不认为辍学在这里会做任何事情(你只有 2 个单位)。是的,你应该尝试随机森林,看看它是否能提供更好的结果。如果不是,那么您的数据集或训练/测试拆分可能存在一些结构性问题。 25k 和使用验证对我来说听起来不错,甚至听起来你应该有余地来使用更复杂的正则化模型,这里的过度拟合听起来像一个倾斜的数据和一个不幸的训练/测试拆分。
标签: python neural-network keras classification