caffe训练网络不收敛——有哪些坑需要我们去填

在深度学习领域,caffe已经被广泛使用了,但是对于caffe新手来说,在网络训练过程中总会遇到一些摸不着头脑的问题不知道如何解决,本文总了我在使用caffe过程中的一些经验。

  1. 自己定义网络结构——训练
    自己定义网络结构在训练过程中一般需要两个文件:solver.prototxt 和 train-val.prototxt. 其中solver文件中存放的是网络参数更新方法,比如SGD(随机梯度下降),caffe中默认使用SGD对网络参数进行训练,除非特别指明别的参数更新方法。在这个文件中比较重要的参数是学习率(base_lr)的设置。base_lr这个参数在自己训练新网络时,可以从0.1开始尝试,如果模型不收敛(loss不下降的意思),那就降低,除以10,用0.01尝试,一般来说0.01会收敛,不行的话就用0.001. 这个学习率也不是固定不变的,在solver文件中还要设置,这个学习率的更新方法,有的是利用step,迭代多少次后更新,更新参数为gamma。
    train-val文件,存放网络构架。 这个文件有坑,有的网络使用layer{}实现,有的是layers{},这两者构建出俩的网络结果一样,但是内部参数的名称表示会有不同,一定要注意区分。

  2. fine-tune别人的网络构架——训练
    利用别人的网络构架,会省事很多。跟自己训练网络的主要不同在于,train-val文件和训练时脚本不同。前几层的卷积网络用来提取general特征,后面几层fc网络用来提取跟特定task有关的特征,因此在fine-tuning的时候,可以设置前面几层卷积层学习率为0. 直接把别人的网络参数copy过来自己用,只需要利用fc学习自己特殊的特征即可。


讲了这么多,还没有讲到坑在哪里。
其实坑就在数据准备过程中。
很多同学会发现,为什么我训练网络的时候loss一直居高不下,或者呈震荡趋势,不收敛。
居高不下:loss维持在80多,不要以为80多是个小数字,如果你傻傻的一直训练,就会白白浪费GPU的寿命。
这种情况一般是因为数据类别有误,caffe支持类别从0开始划分,比如说3类,那么类别应该是0,1,2.如果你的数据给的是1,2,3那么就会出现这个不收敛情况。
震荡不停: 一会到11,一会又0.1,不要以为它总会收敛,其实它很调皮,这种不收敛的情况可能跟你的train-val文件网络构架有误有关,比如你在fine-tuning的过程中,修改了学习率和参数,但是最后一层的类别忘记了修改,原本是10类,但你的数据只要分为3类即可,就会出现此种不收敛情况。

解决以上各种坑的最简单方法就是:细心

——————————————————————————

EMMA
SIAT
2017.03.21

caffe训练网络不收敛——有哪些坑需要我们去填相关推荐

  1. Caffe训练分类器不收敛,loss居高不下

    转载:http://blog.sina.com.cn/s/blog_141f234870102w941.html 我利用Caffe 训练一个基于AlexNet 的三分类分类器,将train_val.p ...

  2. Windows环境下使用 Caffe在ImageNet上训练网络

    在配置好Windows版的Caffe之后,可以使用Windows Caffe训练ImageNet网络,主要有4个步骤: (1)准备图片数据库 (2)将图片数据转换为Caffe可以使用的LMDB或者Le ...

  3. caffe训练技巧总结

    一 数据集的制作 我们经常用到的原始数据是图片文件,如jpg,jpeg,png,tif等格式的,而且有可能图片的大小还不一致,而在caffe中经常使用的数据类型是lmdb或leveldb. 1. 数据 ...

  4. Caffe实践】如何利用Caffe训练ImageNet分类网络

    Caffe实践]如何利用Caffe训练ImageNet分类网络 源文章:https://github.com/BVLC/caffe/tree/master/examples/imagenet 由于要使 ...

  5. caffe框架训练网络参数详解

    建立train_sh脚本文件 #!/sur/bin/env sh set -e /home/yourname/caffe/build/tools/caffe train --solver=/home/ ...

  6. 单通道灰度图片fine-tune训练网络与caffe批量分类测试

    1. 转imdb灰度图数据 一定要加上--gray,否则训练时报如下错误: GLOG_logtostderr=1 $TOOLS/convert_imageset \--resize_height=$R ...

  7. 批量标准化BN方法简介【避免了梯度消失和梯度爆炸、加速网络的收敛、优化网络结构】

    一. 本文的内容包括: 1. Batch Normalization,其论文:https://arxiv.org/pdf/1502.03167.pdf 2. Layer Normalizaiton,其 ...

  8. win10下使用caffe训练自己的数据,车牌二分类

    caffe编译参考:http://blog.csdn.net/cym1990/article/details/72630584 1.数据格式转换 Caffe采用leveldb或者lmdb的数据格式. ...

  9. 【最强ResNet改进系列】IResNet:涨点不涨计算量,可训练网络超过3000层!

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要15分钟 Follow小博主,每天更新前沿干货 [导读]本篇文章是[最强ResNet改进系列]的第四篇文章,前面我们已经介绍了Res2Net和 ...

最新文章

  1. Jquery Ajax调用aspx页面方法
  2. 生活优越与生活艰苦者之间的思考
  3. 【转】十分有用的linux shell学习总结
  4. hive sql插入一行数据_Hive查询某一重复字段记录第一条数据
  5. ora-01092: oracle 实例终止.强制断开连接,undo表空间故障特殊恢复(二)------ORA-01092: ORACLE 实例终止。强制断开连接...
  6. 【tool】iptables防火墙
  7. 虚拟机ping不通主机与外网的解决方法
  8. paip.论程序断点的类型以及设置总结
  9. 基于MVC模式的企业公文处理信息系统的设计与实现
  10. python列表如何求增长率_python如何计算环比增长率
  11. 智能园区中的身份识别的原理是什么?
  12. 什么事LLVM和Clang?Clang与GCC有什么区别?Clang如何使用?
  13. vim滚动屏幕快捷键汇总
  14. tiny4412 裸机程序 八、重定位到DRAM及LCD实验
  15. 一行代码就能使用PYTHON开发的小游戏
  16. get_transform is not allowed to be called from a MonoBehaviour constructor (or instance field initia
  17. Assembly ADODB注册
  18. 2020计算机考研扩招,官|东北石油大学计算机学院2020研究生调剂·增额扩招
  19. 电子计算机的基本结构基于存储程序,01计算机基础知识题(50道)
  20. leetcode-LCP 35

热门文章

  1. NAT与NAPT技术详解
  2. 大数据hive 参数调优
  3. Vue+OpenLayers学习系列(十一)使用axios加载GeoServer发布的WFS服务
  4. 将两个递增的有序链表合并为一个递增的有序链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中不允许有重复的数据。
  5. 《气候经济与人类未来》—读书笔记
  6. 改变eden区,from,to区的比例
  7. 信息学奥赛一本通:2070:【例2.13】数字对调
  8. oracle sysdate加减日期,oracle 日期 加减方法
  9. 纯代码实现人民币兑换美元
  10. 关于cqhttp需要扫描但是miui不支持爱加速的解决办法