精度随着时代的增加而降低

Posted

技术标签:

【中文标题】精度随着时代的增加而降低【英文标题】:Accuracy Decreasing with higher epochs 【发布时间】:2019-04-14 00:51:10 【问题描述】:

总的来说,我是 Keras 和机器学习的新手。我正在尝试使用 Sequential 模型构建二进制分类模型。经过一些试验后,我发现在多次运行(并非总是如此)中,我在第二或第三个 epoch 本身的验证数据上获得了甚至 97% 的准确度,但这急剧下降到 12%。这背后的原因是什么?如何微调我的模型? 这是我的代码 -

model = Sequential()
model.add(Flatten(input_shape=(6,size)))
model.add(Dense(6,activation='relu'))
model.add(Dropout(0.35))
model.add(Dense(3,activation='relu'))
model.add(Dropout(0.1))
model.add(Dense(1,activation='sigmoid'))
model.compile(loss='binary_crossentropy',optimizer='adam',metrics=['binary_accuracy'])
model.fit(x, y,epochs=60,batch_size=40,validation_split=0.2)

【问题讨论】:

你损失得怎么样了?也增加了? 一个字:过拟合 正如 Matias 上面提到的,overfitting 的情况是:您提供给模型的数据越多,它产生的噪音就越多,因此无法保持准确性。因为每一层都是用随机权重初始化的,所以每次从干净状态运行模型时,它都会产生不同的结果。如果您将输入数据样本添加到问题中,它可能会帮助我们更深入地挖掘,因为现在很难仅从代码(除了它非常简单)来判断可能出了什么问题。 损失总是下降到 0.6 左右。增加输入数据量会避免过度拟合吗?每个数据样本都是一个二维数组,格式为 (6,50) 【参考方案1】:

根据我的说法,您可以考虑以下因素。

    将您的学习率降低到一个非常小的数字,例如 0.001 甚至 0.0001。 提供更多数据。 将辍学率设置为 0.2 之类的数字。 在整个网络中保持统一。 尝试减小批量大小。 使用适当的优化器:您可能需要对此进行一些试验。在同一网络上使用不同的优化器,并选择损失最小的优化器

如果上述任何因素对您有用,请在 cmets 部分告诉我。

【讨论】:

我已经使用第 4 点解决了我的问题。谢谢 第 3 点对我有好处。从高学习率开始,在几个 epoch 后减少,然后重复。【参考方案2】:

当我遇到这个问题时,我通过将优化器从 RMSprop 更改为 adam 来解决。我还降低了学习率,并在每个完全连接的层之后添加了 dropout。如果您的 FC 层的神经元数量较少,则添加 dropout 不会产生重大影响。

【讨论】:

【参考方案3】:

降低学习率(如 0.001 或 0.0001)并在每个卷积层之后添加批量归一化。

【讨论】:

您的答案似乎重复了之前提供的答案。您可能想强调下一次要分享的新信息。例如。在这种情况下加粗“批量标准化”。

以上是关于精度随着时代的增加而降低的主要内容,如果未能解决你的问题,请参考以下文章

ga遗传算法如何提高精度

JavaFX 滚动表更新性能随着时间的推移而降低

深度学习|ResNet

降低精度Sympy等价类

Redshift 中并行查询的执行时间随着查询数量的增加而急剧增加

如何停止 redis 内存使用量随着连接数的增加而增加