验证损失 >> 训练损失,相同数据,二元分类器

Validation loss >> train loss, same data, binary classifier

我实现了 this paper's 神经网络,但有一些差异(下图),用于 EEG class化; train_on_batch 性能非常好,损失非常低 - 但 test_on_batch 性能虽然在 相同数据 上很差:网络似乎总是预测“1”,大多数时间:

       TRAIN (loss,acc)   VAL (loss,acc)
'0' -- (0.06269842,1)     (3.7652588,0)
'1' -- (0.04473557,1)     (0.3251827,1)

一次从 32 (= batch_size) 个数据集(img 下面)

有什么补救措施吗?


已尝试进行故障排除

  1. 禁用辍学
  2. 禁用所有正则化器(batch-norm 除外)
  3. 随机,val_acc('0','1') = (~.90, ~.12) - 然后回到 (0,1)

其他详细信息:


更新: 取得了进展; batch_normalizationdropout 是罪魁祸首。主要变化:

观察到相当大的改进 - 但不是全部。训练与验证损失行为确实很奇怪 - 翻转 class 预测,并轰炸与 刚刚训练 完全相同的数据集:

此外,BatchNormalization 训练与测试时间的输出差异很大(下图)


更新 2: 排除了所有其他怀疑:BatchNormalization 是罪魁祸首。使用带有 SELU 和 AlphaDropout 的自标准化网络 (SNN) 代替 BatchNormalization 会产生稳定且一致的结果。

我不小心遗漏了一个 non-standardized 样本(一批 32 个),sigma=52 - 这严重破坏了 BN 层; post-standardizing,我不再观察到训练模式和推理模式之间的明显差异 - 如果有的话,任何差异都很难发现。

另外,整个预处理过程非常错误,重新正确处理后,问题不再出现。作为调试提示,尝试确定任何特定训练数据集是否在推理过程中急剧改变层激活。