DL杂谈
好久不写了,几点这次项目经验吧,本次训练位多任务训练,主要目的训练人脸角度,具体公司项目不细谈。
讲一下主要碰到的坑:
1 最主要问题,网络结构不对称,导致主任务与辅助任务之间的梯度关系不平衡从而导致没法收敛!!!!真的是调参调的心都碎了,最后显示梯度发现这个问题
caffe显示梯度代码:https://blog.csdn.net/jyli2_11/article/details/74989852
其间做过的其他尝试:
1.1 先训练辅助任务, 采用SGD设置大学习率,辅助任务下降至符合要求以后再训练主任务------结果主任务降不下来
1.2 先主任务后辅助,与上面差不多
1.3 交替训练,各跑几轮,都降不下来。。。。。我想死了已经
1.4 以训练终极应达到的loss为标准配比损失函数权重
1.5 以训练过程中的loss基本相同为标准配比损失函数权重
1.6 使用不同的优化方法,主要包括SGD和AdaDelta
以上在没改网络之前都是没用的东西,再改了网络以后采用1.5方法下降速度比较快
所以网络结构很重要!!!虽然其他大佬跟我讲我这个收敛不下来的问题应该网络不是主要原因,但这是我自己经验好吧,先记着。
具体说一下网络结构,使用Mobilenet基础上进行简化,上面讲的没对称指的就是分任务的时候没有同样使用Conv-BN-Scale-Relu结构,直接使用Conv-TanH导致上诉问题,
其实说白了也不是结构对称,就是差个归一化,导致梯度不一样
贴个美美的图吧
2 再讲一点关于caffe的
本次多任务使用主要使用concat层以及slice层,slice层图见上,concat层
数据输入部分采用ImageData格式,比原来那个好用的不行,强烈推荐
因为训练图片只有18W零旋转角度样本,其他角度需要代码生成,所以需要改一定的caffe源码
具体更改Image_Data_Layer.cpp方法见 https://www.cnblogs.com/haiyang21/p/7182676.html?utm_source=itdadao&utm_medium=referral
没改他这么多,自己调着用就行,主要注意top[1]初始化空间分配问题
ok,就讲这么多了,咖啡电视走起来~