验证损失比训练损失少 5 个单位。如何解释这个结果?

数据挖掘 深度学习 喀拉斯 语音转文本
2022-03-07 03:28:24

我正在训练一个用于端到端语音识别的 Keras 模型。我有自己的语音数据集,其中包含大约 400 个波形文件。文本转录也作为输入给出。模型总结为:

_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
the_input (InputLayer)       (None, None, 26)          0         
_________________________________________________________________
layer_1_conv (Conv1D)        (None, None, 30)          3930      
_________________________________________________________________
conv_batch_norm (BatchNormal (None, None, 30)          120       
_________________________________________________________________
rnn_bi (GRU)                 (None, None, 40)          8520      
_________________________________________________________________
bt_rnn_bi (BatchNormalizatio (None, None, 40)          160       
_________________________________________________________________
bidirectional_15 (Bidirectio (None, None, 40)          19440     
_________________________________________________________________
bt_rnn_final (BatchNormaliza (None, None, 40)          160       
_________________________________________________________________
time_distributed_15 (TimeDis (None, None, 29)          1189      
_________________________________________________________________
softmax (Activation)         (None, None, 29)          0         
=================================================================
Total params: 33,519
Trainable params: 33,299
Non-trainable params: 220
_________________________________________________________________
None
  • 使用的优化器:Adadelta()
  • 损失函数:ctc_loss函数。
  • 辍学:0.5

最后一个时期的训练和验证损失是:

Epoch 392/400
27/27 [==============================] - 36s - loss: 19.9499 - val_loss: 16.5945

Epoch 393/400
27/27 [==============================] - 34s - loss: 18.9789 - val_loss: 14.1015

Epoch 394/400
27/27 [==============================] - 36s - loss: 17.9598 - val_loss: 14.2997

Epoch 395/400
27/27 [==============================] - 34s - loss: 17.1506 - val_loss: 15.1215

Epoch 396/400
27/27 [==============================] - 35s - loss: 17.4900 - val_loss: 14.0334

Epoch 397/400
27/27 [==============================] - 35s - loss: 17.7459 - val_loss: 14.7812

Epoch 398/400
27/27 [==============================] - 35s - loss: 18.3460 -  val_loss: 14.4461

Epoch 399/400
27/27 [==============================] - 35s - loss: 17.4311 - val_loss: 15.5965

Epoch 400/400
27/27 [==============================] - 35s - loss: 17.6892 - val_loss: 12.4165

谁能向我解释这种损失是如何解释的?训练损失和验证损失的正确值是多少,所以我的模型可以正确预测输出值?

我尝试减少损失,它确实减少了,相差正负1个单位,但测试测试完全不正确。谁能建议我获得正确测试结果的方法?

1个回答

这里的关键是辍学。当模型使用 dropout 进行训练时,只有总权重的一部分(在您的情况下为 50%)用于预测,这往往会降低预测准确性。当验证数据被测试时,dropout被关闭,验证损失往往会低很多。有关更多信息,请参见类似问题的答案。