首页 文章

Keras密集网过度拟合

提问于
浏览
1

我试图使用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的箱子中,与前一箱箱重叠50% . 我可以采取哪些措施来使网络产生实际预测?我试过增加窗口大小,但结果保持不变 . 任何建议/一般提示非常感谢 .

伊恩

2 回答

  • 0

    尝试在网络中添加一些隐藏图层和丢失图层 . 你可以创建一个简单的Multi Layer Perceptron (MLP),在Flatten图层和Dense图层之间有一些额外的线条:

    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% . 这最终是您必须决定的事情 .

  • 0

    过度拟合的问题是由输入数据类型引起的 . 传递给分类器的值应该是带有2个小数位的浮点值 . 在此过程中的某些地方,其中一些值已经增加,并且显着超过2位小数 . 也就是说,输入应该看起来像

    [9.81, 10.22, 11.3]
    

    但反而看起来像

    [9.81000000012, 10.220010431, 11.3000000101]
    

    分类器正在根据此功能进行预测,这显然不是理想的行为!学到的经验教训 - 确保数据准备是一致的!感谢@umutto对随机森林的建议,简单的结构有助于诊断目的 .

相关问题