caffe finetune两种修改网络结构prototxt方法

第一种方法:将原来的prototxt中所有的fc8改为fc8-re。(若希望修改层的学习速度比其他层更快一点,可以将lr_mult改为原来的10倍或者其他倍数)

第二种方法:只修改name,如下例子所示:layer {name: "fc8-re" #原来为"fc8"type: "InnerProduct"bottom: "fc7"top: "fc8"param {lr_mult: 1.0decay_mult: 1.0}param {lr_mult: 2.0decay_mult: 0.0}inner_product_param {num_output: 5 #原来为"1000"weight_filler {type: "gaussian"std: 0.01}bias_filler {type: "constant"value: 0.0}}}

  


caffe是一个深度学习框架,在建立好神经网络模型之后,使用大量的数据进行迭代调参数获取到一个拟合的深度学习模型caffemodel,使用这个模型可以实现我们需要的任务。

    如果对caffe并不是特别熟悉的话,从头开始训练一个模型会花费很多时间和精力,需要对整个caffe框架有一个很清楚的了解,难度比较高;同时,在使用数据迭代训练自己模型时会耗费很多计算资源。对于单GPU或者没有大的GPU计算能力的研究者会比较困难。所以,使用已经训练好的caffe模型来进行finetuning就会是一个比较好的选择。

所谓fine tune就是用别人训练好(通常是ImageNet上1000类分类训练)的模型参数的基础上,加上我们自己的数据和具体的分类识别任务来进行特定的微调,以训练新的模型。fine tune相当于使用别人的模型的前几层,来提取浅层特征,然后在最后再落入我们自己的分类中。
    fine tune的好处在于不用完全重新训练模型,从而提高效率,因为一般新训练模型准确率都会从很低的值开始慢慢上升,但是fine tune能够让我们在比较少的迭代次数之后得到一个比较好的效果。在数据量不是很大的情况下,fine tune会是一个比较好的选择。但是如果你希望定义自己的网络结构的话,就需要从头开始了。

另外,finetuning需要的计算资源相对较少,使用的trikes相对较少,难度较低,比较适合caffe新手。在finetuning过程中熟悉caffe的各种接口和操作。

finetuning的过程和训练的过程步骤大体相同,因此在finetuning的过程中可以对caffe训练过程有一个详细的了解,通过一步步的训练和finetuning,在寻找最优参数过程中加深对caffe框架的理解,为自己后续自己从头开始训练一个caffe深度网络模型打好基础。

话不多说,具体的fine-tuning流程如下:

一、准备好自己的训练数据和测试数据;
    二、计算数据集的均值文件,因为数据集中特定领域的图像均值文件会跟imagenet上比较general的数据的均值不太一样;

前面两步和平时我们训练时制作自己的数据一样;
    三、复制一份该model文件对应的prototxt文件进行修改,因为finetuning的过程是让原有训练好的模型适应自己的数据,因此一般情况下,网络的模型并没有大的变化。修改网络最后一层的网络名字(这样预训练模型赋值的时候就会因为名字的不同而重新训练,达到适应新任务的目的)和输出类别num_output,并且需要加快最后一层的参数学习速率(因为是最后一层要重新学习,所以将最后一层的weight和bias的lr_mult加快10倍),此外,和fc8相关的名字都要改掉;


    四、调整solver文件的网络参数,通常学习数率和步长,迭代次数都要适当减少,这正式微调的本质所在;基本上就是将test_iter\base_lr\stepsize\max_iter进行相应地减小;
    五、启动训练,并且需要加载pretrained模型的参数。在caffe根目录下运行: ./build/tools/caffe train -solver models/finetune_flickr_style/solver.prototxt -weights models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel -gpu 0

选取train函数,后面接具体的参数,分别为配置命令,配置文件路径,fine-tuning命令,fine-tuning依赖的基准模型文件目录,选用的训练方式:gpu或者cpu,使用cpu时可以默认不写。fine-tuning的过程与训练过程类似,只是在调用caffe接口时的命令不同,因此在fine-tuning之前,仍然需要按照训练流程准备数据:下载数据->生成trainset和testset->生成db->设置好路径->fine-tuning。这过程主要调用的是我们修改好的solver来自我们修改好的solver.prototxt文件,weights来自我们下载好的caffemodel。

 

转载于:https://www.cnblogs.com/sddai/p/10339856.html

caffe中的fine-tuning相关推荐

  1. 计算机视觉之迁移学习中的微调(fine tuning)

    现在的数据集越来越大,都是大模型的训练,参数都早已超过亿级,面对如此大的训练集,绝大部分用户的硬件配置达不到,那有没有一种方法让这些训练好的大型数据集的参数,迁移到自己的一个目标训练数据集当中呢?比如 ...

  2. 如何fine tuning

    先看一个示例 keras入门 -在预训练好网络模型上进行fine-tune https://blog.csdn.net/hnu2012/article/details/72179437 我们的方法是这 ...

  3. pytorch深度学习-微调(fine tuning)

    微调(fine tuning) 首先举一个例子,假设我们想从图像中识别出不同种类的椅子,然后将购买链接推荐给用户.一种可能的方法是先找出100种常见的椅子,为每种椅子拍摄1,000张不同角度的图像,然 ...

  4. pretraining+fine tuning

    few shotlearning简单实现方法:在大规模数据做预训练模型,然后在小规模suport set上做fine tuning.方法简单准确率高. 基础数学知识: cos函数可以判断两个向量的相似 ...

  5. caffe中常用的层:全连接层Full Connection层

    全连接层到底什么用?我来谈三点. 全连接层(fully connected layers,FC)在整个卷积神经网络中起到"分类器"的作用.如果说卷积层.池化层和激活函数层等操作是将 ...

  6. Bert模型 fine tuning 代码run_squad.py学习

    文章目录 关于run_squad.py 分模块学习 SquadExample InputFeatures create_model model_fn_builder input_fn_builder ...

  7. Caffe中对MNIST执行train操作执行流程解析

    之前在 http://blog.csdn.net/fengbingchun/article/details/49849225 中简单介绍过使用Caffe train MNIST的文章,当时只是仿照ca ...

  8. Caffe 中的卷积--权宜之计

    Caffe 中的卷积中的效果不是很好,经常被人所诟病.首先来看看作者本人是怎么回答这个问题的. https://github.com/Yangqing/caffe/wiki/Convolution-i ...

  9. caffe中在某一层获得迭代次数的方法以及caffe编译时报错 error: ‘to_string‘ is not a member of ‘std‘解决方法

    caffe中在某一层获得迭代次数的方法以及caffe编译时报错 error: 'to_string' is not a member of 'std'解决方法 参考文章: (1)caffe中在某一层获 ...

最新文章

  1. php ob_flush 和flush
  2. Python 经典模块可能都学过,10道题测试你会不会用?
  3. ubus c语言例子,openwrt之ubus例子
  4. android config.mk,android编译分析之10—config.mk
  5. 海量数据寻找最频繁的数据_在数据中寻找什么
  6. java 默认排序方式_Java Collections.sort()实现List排序的默认方法和自定义方法
  7. 14-Scala之隐式转换
  8. python创建虚拟环境jupyter_创建 python 虚拟环境以及对应的 jupyter notebook kernel
  9. oracle 11g Flashback Data Archive(闪回数据归档)
  10. 人工智能 4.不确定性推理方法
  11. 《网络神采4》技术大揭密之:DedeCMS存储过程
  12. Altium designer常用设置【转】
  13. ”微信小程序“一场风暴还是过江之鲫
  14. 查看eigen库版本的指令
  15. 基于kinect v2的模型三维重建算法(个人毕设总结)
  16. 自建cdn搭建_自建CDN
  17. 云中的安全api使用云端点espv2 beta运行云功能和应用程序引擎
  18. 【公益创投】“爱无限·心关爱”2021心理情景剧剧本征集活动结果出炉啦!
  19. skip-gram模型理解
  20. webrtc的DEMO环境搭建

热门文章

  1. 小学生计算机按键分布图,人教版(新版)小学信息三下第2课《常用按键掌握牢》课件.ppt...
  2. php根据下标倒序排,PHP的三种排序方式
  3. 计算机三大科学理论是,近代科学最伟大的三大理论:进化论、量子论和计算论...
  4. Mysql合并两个sql结果
  5. 如何将本地项目提交到git服务器中
  6. Java中线程的实现方式
  7. Ubuntu下修改root密码
  8. 超融合平台安装oracle,超融合平台集成实施方案
  9. Lock应用之 读写锁
  10. [转]How to override HandleUnauthorizedRequest in ASP.NET Core