Tensorflow 验证损失>&燃气轮机;列车丢失,相同数据,二进制分类器
我实现了神经网络,但有一些不同(img如下),用于EEG分类<代码>批量训练性能优异,损失非常低-但是Tensorflow 验证损失>&燃气轮机;列车丢失,相同数据,二进制分类器,tensorflow,keras,classification,conv-neural-network,batch-normalization,Tensorflow,Keras,Classification,Conv Neural Network,Batch Normalization,我实现了神经网络,但有一些不同(img如下),用于EEG分类批量训练性能优异,损失非常低-但是批量测试性能较差,尽管数据相同:网络似乎总是预测“1”,大多数情况下: TRAIN (loss,acc) VAL (loss,acc) '0' -- (0.06269842,1) (3.7652588,0) '1' -- (0.04473557,1) (0.3251827,1) 数据以30秒段(12000个时间步)(每个数据集10分钟)的形式从32个(=批量大小)数据
批量测试
性能较差,尽管数据相同:网络似乎总是预测“1”,大多数情况下:
TRAIN (loss,acc) VAL (loss,acc)
'0' -- (0.06269842,1) (3.7652588,0)
'1' -- (0.04473557,1) (0.3251827,1)
数据以30秒段(12000个时间步)(每个数据集10分钟)的形式从32个(=批量大小)数据集一次输入(img如下)
有什么补救办法吗
尝试进行故障排除:
- Keras 2.2.4(TensorFlow后端)、Python 3.6、Spyder 3.3.4通过Anaconda
- CuDNN LSTM有状态
- CNN预先培训,LSTM随后添加(并且都经过培训)
在每个CNN&LSTM层之后BatchNormalization
在不同数据集之间应用reset_states()
- 在除最后一个CNN块之外的每个CNN块后插入
更新: 取得了进展<代码>批量标准化和
辍学
是罪魁祸首。主要变化:
- 移除LSTM、高斯噪声、挤压激励块(以下为img)
- 实现的批处理规范
- 增加了
,以反映等级不平衡-介于0.75和2之间李>样本权重
- 为MaxPool和Input辍学者提供各种热身方案培训
BatchNormalization
列车期间的输出与测试时间相差很大(img如下)
更新2:排除了所有其他怀疑:BatchNormalization是罪魁祸首。使用带有SELU和AlphaDropout的自规范化网络(SNN)代替批量规范化,可产生稳定一致的结果。
我无意中留下了一个非标准化样本(一批32个样本),
sigma=52
——严重破坏了BN
层;标准化之后,我不再观察到训练模式和推理模式之间的强烈差异——如果有任何差异的话,任何差异都很难发现
此外,整个预处理过程都是错误的——正确地重做后,问题不再重现。作为调试提示,尝试确定在推断过程中是否有任何特定的列车数据集会急剧改变层的激活。我无意中留下了一个非标准化样本(一批32个样本),其中
sigma=52
-严重破坏了BN
层;标准化之后,我不再观察到训练模式和推理模式之间的强烈差异——如果有任何差异的话,任何差异都很难发现
此外,整个预处理过程都是错误的——正确地重做后,问题不再重现。作为调试提示,请尝试确定在推理过程中是否有任何特定的训练数据集会急剧改变图层激活。我建议1)绘制训练精度和训练损失随时间的变化。如果准确率提前达到100%或训练损失下降过快,则加快正则化2)如果过度拟合(更有可能)-提高学习率,如果欠拟合-减少学习引用的统计数据在所有数据集中持续存在;训练集和验证集是sameI建议的1)绘制训练精度和各个时期的训练损失。如果准确率提前达到100%或训练损失下降过快,则加快正则化2)如果过度拟合(更有可能)-提高学习率,如果欠拟合-减少学习引用的统计数据在所有数据集中持续存在;训练集和验证集是相同的