TensorFlow之炼丹记
2018-10-12 本文已影响0人
逆风g
这篇文章主要是把训练网络过程中遇到的一些问题,给记录下来,以防以后遇到。
持续更新中...
- 网络不收敛,即loss不下降
- 问题描述
这是一个编解码网络,在编码器最后面添加了近10层的残差网络后,网络loss不下降,基本呈直线状态,图片也一直显示为规律的噪声,没添加那10层网络时,是可以收敛的。 - 解决之道
原来初始化方法有问题,我选的参数初始化方法是截断正太分布,即tf.truncated_normal(shape,stddev=0.1)
,激活函数是relu。把标准差从0.1变成0.01,重新训练网络,loss开始下降,直到收敛。 - 分析原因
这个原因是我猜测的,标准差为0.1时,部分参数逼近于0,又使用了relu激活函数,造成网络中有很多神经元已经“die”,它们梯度就永远都是0。而标准差为0.01时,参数情况会好很多。
- 显卡内存不足,电脑卡掉
- 问题描述
显卡是1080ti,内存11GB,分类的种类从2分类变成了20分类,也就是通道数大大增加,造成了显卡内存不足。选择调用优化器之前下断点,程序运行到断点处停下,结果电脑还是卡掉。 - 解决之道
把tf.train.shuffle_batch
中的capacity从100降到了30,网络输入图片尺寸为1024×2048也没有问题,当然实际训练中用到的尺寸是512×1024。 - 分析原因
我是用线程读取的tfrecord文件,里面把标签图png做了处理,变成了指定类别个数的featuremap([h,w,c]),因为通道数从2变成了20,而tf.train.shuffle_batch中的capacity仍然是100,造成了显卡内存不够使,capacity的意思是队列中有100张图片,随机选择batchsize张图片。