刚刚训练完了mnist数据集,不过大多数人肯定都是按照网上的博客一步一步跟着操作的吧!其实也不是很懂。不知道你的心里是否有以下三个问题呢?

  1.怎么进行数据格式处理?/怎么生成LMDB/LEVELDB格式数据?

  2.怎么编写网络结构文件?

  3.怎么编写网络求解文件?

  这篇文章,我们就来回答一下这三个问题。为以后自己熟练的训练模型打下一个坚实的基础!

一、怎么进行数据格式处理?/怎么生成LMDB/LEVELDB格式数据?

  在caffe中,作者为我们提供了这样一个文件:convert_imageset.cpp,存放在根目录下的tools文件夹下。编译之后,生成对应的可执行文件放在 buile/tools/ 下面,这个文件的作用就是用于将图片文件转换成caffe框架中能直接使用的lmdb文件。

  通用步骤:

  1. 获取数据集
  (如果网上有的可以下载,也可以自己进行制作)数据集就是图片,目前数据集格式可能是png,jpg,bmp或二进制文件等等

  2. 为自己的数据制作标签(label)
  在caffe中,标签制作比较麻烦,但也有方法可循。标签文本文件的内容就是图片的位置后加图片的类别。例如(/home/user/1.jpg 1)。标签的文件制作,后面会专有一篇博客去谈论,感兴趣的朋友可以写出来后去参考。(ps:对于mnist数据集因为是caffe本身自带,就让标签这部分透明了,使用者不需要去管。但要想搞自己的东西,这步还是必不可少滴!)

  3. 调用caffe工具(图像格式转换):
  以mnist数据集为例:Minst数据集转换工具位置:caffe/examples/minst/convert_cifar_data.cpp。运行.examples/minst/create_minsh.sh(不过数据集转换的脚本需要我们自己编写,后面的博客我也会详细介绍滴!)生成lmdb格式的位置是自己定义的。比如mnist数据集中就会在caffe/examples/minst/下生成的。

二、怎么编写网络结构文件?

  打开网络结构的文件,会发现都是Layer。Layer是什么呢?(我在此简单的介绍下,更为详细的还要去看caffe的语法书)
  Layer是一个大类:主要包含NeuronLayer类,LossLayer类,数据。
基本格式:
Layer{
  xxx:”xxx”
  xxx:”xxx”
}
Layer的结构是:
layers {
  bottom: “decode1neuron” // 该层底下连接的第一个Layer,代表输入
  bottom: “flatdata” // 该层底下连接的第二个Layer
  top: “l2_error” // 该层顶上连接的一个Layer,代表输出
  name: “loss” // 该层的名字
  type: EUCLIDEAN_LOSS // 该层的类型
  loss_weight: 0
}
  注意
  bottom是上面的层,个数不唯一,top是下面的层。可理解为bottom是输入,top是输出。后面的内容就是每层的name

  type是层数的种类,是基本固定的。类型种类如下(具体情况见caffe/proto):

  1)vision 5层:Convolution,Deconvolution,Im2col,LRN,Pooling

  2)激活 9层:AbsVal,BNLL,Dropout,Power,ReLU,Sigmoid,TanH, Threshold ,EXP

  3)common 10层:ArgMax,Concat,Eltwise,Flatten,InnerProduct,MVN,Silence,Softmax,Split,Slice

  4)data 7层:Data,DummyData,HDF5Data,HDF5Output,ImageData,MemoryData,WindowData

  5)loss 8个:Accuracy,ContrastiveLoss,EuclideanLoss,HingeLoss,InfogainLoss,MultinomialLogisticLoss,SigmoidCrossEntropyLoss,SoftmaxWithLoss

  Param中包含本层的参数,参数不止一个,各个独立的参数之间使用{}分隔。独立参数内包括各个超参数。整体格式为:

Param{
  超参数类型:超参数数值
}
  (什么是超参数呢?为什么会有一个“超”字呢?(cool!)其实所谓的超参数,就是模型中那些可以人为设定的参数,通过修改超参数可进行模型的微调。为了与一般的参数区别,即谓之超参数。~哦,原来是这样!)

  卷积层超参数类型包括:num_output(卷积核个数), pad, kernel_size, stride等(超参数类型取决于param的类型,我猜应该有张表,但我未找到)
  大家可以从下面这位博主的这篇博客里见一见卷积层,激活层的示例,会更深刻的理解:https://blog.csdn.net/wendygelin/article/details/88405871[]link](https://blog.csdn.net/wendygelin/article/details/88405871)

  下面开始正式回答第二个问题:
  答案就是:基本不用自己写。只需要每次改变下train和test两个Layer中lmdb的位置就行。(当然了,此方法只适用于新手。到了后期肯定要开发出自己的模型。但那个时候水平相比很高了,就不是我能说的了~)

三、怎么编写网络求解文件(solver文件)?

  Slover作为控制模型的核心,我理解为整个模型的头文件。

  Slover文件中包括写程序的人设置的一些超参数(学习率,优化器类型,迭代次数等等)

  对于solver文件的介绍给大家推荐一篇博客,感觉写的比我好多了(我不再献丑了~):https://blog.csdn.net/qq_26898461/article/details/50445392link
  不过我给大家介绍一下目前为止,我经历过solver文件中常修改的参数:
  因为我们的模型大多是从网络上下载的——对对对!就是那个面向github编程。关于优化器的一些参数都是已经调好的,不再修改。当然,路过大神请无视,当听了个玩笑。
  常修改的参数包括网络文件参数net、测试集迭代次数test_iter(有需要的修改)、终端间隔显示display(这个我建议CPU的选手可以初始设定为1,看迭代1次需要花多长时间,再判断迭代多少次比较合适)、最大迭代数max_iter、训练多少次保留caffemodel的snapshot、caffemodel保留位置参数snapshot_prefix、决定训练方式的solver_mode。例如mnist数据集的solver文件如下:

# The train/testnet protocol buffer definition
net:"examples/mnist/lenet_train_test.prototxt"# test_iter specifies how many forward passes the test should carry out.
# In the case of MNIST, we have test batch size 100 and 100 test iterations,
# covering the full 10,000 testing images.
#测试集迭代100次:共10000/100 = 100,每次100个样本
test_iter: 100# Carry out testing every 500 training iterations.
#每训练500次迭代,进行一次测试
test_interval: 500# The base learning rate, momentum and the weight decay of the network.
base_lr: 0.01#冲量,在SGD优化器中可以达到避免震荡的作用
momentum: 0.9#权值衰弱常数,防止过拟合。在训练期间,将正则化项添加到网络的损失中以计算后向梯度。 weight_decay值确定该正则化项在梯度计算中的优势
weight_decay:0.0005# The learningrate policy
#学习率计算的方法,共有七种,根据base_lr和learning_rate_lr计算。inv计算公式是 base_lr * (1 + gamma * iter) ^ (- power)所以之后两个参数是gamma和power
lr_policy:"inv"gamma: 0.0001power: 0.75#每100次迭代在终端中显示一次xxx
# Display every 100 iterations
display: 100# The maximumnumber of iterations
max_iter: 10000# snapshotintermediate results
#snapshot用来保存模型,每经过指定次数会形成一个模型,以后再训练时可在其基础上训练
snapshot: 5000snapshot_prefix:"examples/mnist/lenet"# solver mode: CPUor GPU
solver_mode: CPU

  买三送一,再来一个!

  迭代和epoch的区别?
  迭代是进行完一次batch_size,一个epoch是进行完一个数据集内所有的数据,一个epoch中有个total/batch_size次迭代。

  学习就是慢慢解决问题的过程,希望以后遇到的问题越来越多,解决的问题也越来越多。不过这三个问题(哦,四个)你也解决了吗?

由于本文作者水平有限,如有不足之处,请下方评论区指正,谢谢!

caffe新手常遇到的三个问题相关推荐

  1. UI设计新手常遇到的问题及解决方法,快来看一看!

    UI是研究人机交互的学科,单从目前它的应用领域来看主要应用于软件.互联网.移动设备.游戏和虚拟现实影音方面这些都是新兴的热门方向和活跃领域.鉴于UI设计行业最近几年的兴起,有许多年轻人都被它好的就业前 ...

  2. Caffe、TensorFlow、MXnet三库对比

    Caffe.TensorFlow.MXnet三库对比 Google开源了他们内部使用的深度学习框架TensorFlow,结合之前开源的MXNet和Caffe,对三个开源库做了一些讨论.本文首先对三个库 ...

  3. 基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【三】VGG网络进行特征提取

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  4. 138+134 新手寻星,三分钟搞定,呵呵,我明天才!!

    空间 138+134 新手寻星,三分钟,呵呵,我是天才!! 我是河南的新手,从来没玩过卫视,本来是没有需求玩卫星,不过家里的有线不能看,其它村上的安装的有有线,我自己接了一个头出来,但是根本没有几个台 ...

  5. 编程新手所需的三种最重要的技能

    转载自:https://www.2cto.com/shouce/Pythonbbf/intro.html 编程新手所需的三种最重要的技能:读和写.注重细节.发现不同. 读和写 很显然,如果你连打字都成 ...

  6. 幻想三国ol服务器没有响应,《幻想三国OL》新手攻略新手必知的三点建议

    有了攻略你才能更简单的玩游戏,你才知道哪些做了有什么用,哪些做了对你有好处,有想玩<幻想三国>这款游戏的现在跟着小编一起来了解一下这个新手必知的三点小建议吧!! 一.属性点精彩内容,尽在百 ...

  7. QQ空间常遇到的三个问题及解决办法

    QQ空间常遇到的三个问题及解决办法 你的QQ空间用起来有问题?如果您在使用QQ空间过程中发现了问题,又解决不了,不如看看腾讯官方的QQ空间QZone访问的系列问题解决办法,也许能快速找到窍门. Q:我 ...

  8. 新手探索NLP(三)

    目录 NLP语言模型 词的表示方法类型 1.词的独热表示one-hot representation 简介 不足 2. 词的分布式表示distributed representation 简介 建模类 ...

  9. 【开源】Caffe、TensorFlow、MXnet三个开源库对比

    from:http://www.wtoutiao.com/p/1cbxddO.html 最近Google开源了他们内部使用的深度学习框架TensorFlow[1],结合之前开源的MXNet[2]和Ca ...

最新文章

  1. Android10.0 Binder通信原理(一)Binder、HwBinder、VndBinder概要
  2. 以下用于数据存储领域的python第三方库是-Python数据存储及表示
  3. apt命令与yum命令
  4. QT的QDeadlineTimer类的使用
  5. android日期选择滚轮框架,GitHub - liwenzhi/wheelview: 滚轮效果的View,日期选择器
  6. avue下拉框中属性可以显示,但不能选中
  7. pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
  8. 不能编辑access_vcf通讯录编辑器 v3.1.6 vcf通讯录编辑器软件
  9. java编程思想--final关键字
  10. 使用SimHash进行海量文本去重
  11. Mybatis的xml实用的一些技巧
  12. Postman汉化教程
  13. 折半查找并插入(在一个有序数组中通过二分查找数字,若存在,指出其是数组中第几个元素;反之插入数组并有序化)
  14. 机器学习做二元分类问题(二)
  15. java毕业设计物资租赁管理系统mybatis+源码+调试部署+系统+数据库+lw
  16. 虚拟机ping通主机,但是ping不通百度
  17. 如何在Qt中使用数据库Sqlite保存和提取图片
  18. 经典实践 | 网速测速小工具(上)
  19. 如何禁止极速版迅雷thunderplatform.exe启动
  20. MSI_MSI-X中断之源码分析

热门文章

  1. fcpx插件:Chinese New Year Logo Reveal农历新年logo标志片头展示
  2. vs2013配置python_VS2013中Python学习笔记[环境搭建]
  3. ios 上传图片失败 小程序_微信小程序ios端 使用ajaxSubmit上传图片失败,android没问题...
  4. 本地计算机上的mysql80服务启动后停止 某些_MySQL服务启动:某些服务在未由其他服务或程序使用时将自动停止...
  5. php图片上传不现实路径指向错误,上传图片提示这个错误怎么办?
  6. JavaScript笔记-使用JS管理URL链接(前端小技巧)
  7. QML工作笔记-PC端和Android端布局错位问题
  8. Spring Boot注册Servlet三大组建(Servlet、Filter、Listener)
  9. Linux学习笔记-管道的读写特性
  10. Java高级语法笔记-抽象类