神经网络模型不收敛的处理

理论上,只要训练样本足够多,神经网络可以拟合原始数据分布。遇到神经网络不收敛问题,可以先检查下输入数据(归一化,数据量);然后,检查模型优化方法(学习率,优化器(优先Adam这些自适应学习率));最后是,检查模型结构设计(模型是否太简单,已经拟合好数据了,设计更深的网络看loss能否再下降;)等等,欢迎补充。

1、learning rate设大了

0.1~0.0001.不同模型不同任务最优的lr都不一样。

Q: 我现在越来越不明白TensorFlow了,我设置训练次数很大的时候,它一开始就给我“收敛”到一个值,后面的值都一样?
A: 模型batch_size设置问题?网络过拟合了?

2、归一化

一般需要事先对数据进行 归一化、标准化。归一化是把数值压缩到0~1,比如减去最小值,再除以最大值与最小值之差。标准化是,压缩到一个分布, 比如 每列减去 该列的均值,然后每列除于该列的标准差,获得标准正态分布。
python sklearn 的 StandardScaler 可以实现标准化。

3、数据处理

首先,确保数据打乱(shuffle),(数据不打乱,网络极大可能拟合前面几个batch的样本分布);然后,确保 标签 y与loss是搭配的,比如,分类模型的交叉熵 cross entropy,pytorch中target是类别,不需要one-hot,模型输出是logit,不需要softmax;keras和TensorFlow的cross entropy可能会不一样,还得看具体的API定义。


参考:

  1. 深度学习收敛问题;
  2. 训练深度神经网络

你可能感兴趣的:(tensorflow,深度学习,神经网络)