Keras 交叉验证精度在每个 epoch 后稳定在 (1/output_classes)

Posted

技术标签:

【中文标题】Keras 交叉验证精度在每个 epoch 后稳定在 (1/output_classes)【英文标题】:Keras cross-validation accuracy settling at (1/output_classes) after each epoch 【发布时间】:2018-04-23 04:58:56 【问题描述】:

我目前正在尝试训练一个用于语音识别的 DNN,其中包含大量说话者,每个说话者都有自己的标签(output_classes = 说话者总数)。 我的数据库现在有 300 个发言者,Keras 模型摘要如下:

1240 (input size) --> 256 hidden --> 256 hidden --> 256 hidden (0.5 dropout) --> 256 (0.5 dropout) --> Softmax (300)

我分批提供数据(每个扬声器数据 = 一批)并使用以下优化器:

model.compile(
    loss='categorical_crossentropy',
    optimizer='Adam',
    metrics=['accuracy'])

fit_generator如下:

model.fit_generator(
    trainGen(i=0),
    steps_per_epoch=num_class,
    epochs=500,
    validation_data=(x_test, y_test))

trainGen 是我的生成器函数

在训练时,交叉验证准确率始终稳定在 0.0033 即 1/300。不过,训练和交叉验证损失在每个 epoch 之后都在下降。 有什么建议吗?

【问题讨论】:

你很可能是过拟合了。你有多少个数据点? 我正在向网络提供帧级日志过滤器组功能。每个说话者平均有大约 2000 个特征帧。我也怀疑过拟合,但正则化并没有太大帮助。 【参考方案1】:

所以,由于我的数据库太小,我的网络严重过度拟合。添加更多数据和正则化最终有助于获得不错的准确性。

【讨论】:

以上是关于Keras 交叉验证精度在每个 epoch 后稳定在 (1/output_classes)的主要内容,如果未能解决你的问题,请参考以下文章

Keras - 验证精度与 LSTM 中的自测精度不匹配?

Keras 中的 validation_split=0.2 是交叉验证吗?

使用keras的多个验证集

在 PyTorch 中计算每个 epoch 的准确率

为啥 Keras/tensorflow 的 sigmoid 和交叉熵精度低?

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