0

添加 dropout 层使 val 损失保持低于训练损失,在此期间存在恒定的泛化差距是否例外? train 和 val 损失曲线

这是架构:

tf.keras.layers.CuDNNLSTM(1024,input_shape=(9,41),return_sequences=True) ,
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.4),
tf.keras.layers.CuDNNLSTM(512, return_sequences=True),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.4),
tf.keras.layers.CuDNNLSTM(256),
tf.keras.layers.BatchNormalization(),
tf.keras.layers.Dropout(0.4),
tf.keras.layers.Dense(3, activation=tf.nn.softmax)
4

2 回答 2

1

这在使用 Dropout 层时是正常的,解释是由于 Dropout 在训练过程中添加了噪声,因此训练损失增加了一点,而泛化能力的增加使验证损失减少了一点,从而产生了您所看到的这种倒置效果。

是的,有这种泛化差距是正常的。

于 2019-06-19T08:31:48.417 回答
0

无论训练损失是否高于验证损失或反之亦然,或者它们之间存在合理的差距,根据损失曲线的进度来解释损失曲线始终是一种更好的方法。即使验证损失高于训练损失并且两者都在不断减少[直到验证损失不再进一步优化],继续训练也是完全可以的。

PS:在较深的层中使用 dropout 总是比在浅层中使用更好,其背后的原因是部分信息分解原理,因为浅层包含协同信息,而深层包含唯一和冗余信息。

于 2019-06-19T14:32:39.177 回答