验证损失>>火车损失,相同数据,二进制分类器

时间:2019-05-22 05:33:43

标签: tensorflow keras classification conv-neural-network lstm

我实现了this paper's神经网络,用于脑电图分类有一些区别(见下)。 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)数据集的30秒分段(12000个时间步)(每个数据集10分钟)作为数据馈入()

有什么补救办法吗?


尝试进行故障排除

  1. 禁用辍学
  2. 禁用所有正则化器(批处理规范除外)
  3. 随机地,val_acc('0','1')=(〜.90,〜.12)-然后回到(0,1)

其他详细信息

  • 通过Anaconda的Keras 2.2.4(TensorFlow后端),Python 3.6,Spyder 3.3.4
  • 有状态的CuDNN LSTM
  • 已对CNN进行了预训练,之后又添加了LSTM(并且都经过了训练)
  • 在每个CNN和LSTM层之后
  • BatchNormalization
  • reset_states()在不同数据集之间应用
  • 在每个CNN块之后插入
  • squeeze_excite_block


enter image description here

1 个答案:

答案 0 :(得分:0)

我无意中把一个sigma=52留在了一个非标准化样品中(每批32个),这严重破坏了BN层;在标准化之后,我不再观察到训练模式和推理模式之间的巨大差异-如果有的话,很难发现任何差异。

此外,整个预处理过程都是非常错误的-正确地重做后,问题不再出现。作为调试提示,请尝试确定在推理期间是否有任何特定的训练数据集会急剧改变图层的激活。