深度学习--caffe入门学习

本文主要讲解caffe的整个使用流程,适用于初级入门caffe,通过学习本篇博文,理清项目训练、测试流程。初级教程,高手请绕道。

我们知道,在caffe编译完后,在caffe目录下会生成一个build目录,在build\x64\release\目录下有个caffe.exe

有了这个可执行文件我们就可以进行模型的训练,只需要学会调用这个可执行文件就可以了,这便是最简单的caffe学习,不需要对caffe底层的东西懂太多,只需要会调参数,就可以构建自己的网络,然后调用这个可执行文件就可以进行训练,当然如果你不仅仅是调参数,而且想要更改相关的算法,那就要深入学习caffe的底层函数调用了,这个以后再讲。本篇博文仅适合于刚入门学习caffe,高手请绕道。废话不多说,

回归正题:

一、总流程

完成一个简单的自己的网络模型训练预测,主要包含几个步骤:

1、数据格式处理,也就是把我们的图片.jpg,.png等图片以及标注标签,打包在一起,搞成caffe可以直接方便调用的文件。后面我将具体讲解如何打包自己的数据,让caffe进行调用。

2、编写网络结构文件,这个文件的后缀格式是.prototxt。就是编写你的网络有多少层,每一层有多少个特征图,输入、输出……。看个例子,看一下caffe-》example-》mnist-》lenet_train_test.prototxt。这个便是手写字体网络结构文件了,我们需要根据自己的需要学会修改这个文件:

<span style="font-size:18px;">name: "LeNet"
layer {
  name: "mnist"
  type: "Data"  //data层
  top: "data"
  top: "label"
  include {
    phase: TRAIN   //训练阶段
  }
  transform_param {
    scale: 0.00390625   //对所有的图片归一化到0~1之间,也就是对输入数据全部乘以scale,0.0039= 1/255
  }
  data_param {
    source: "examples/mnist/mnist_train_lmdb"  //训练数据图片路径
    batch_size: 64    //每次训练采用的图片64张,min-batch
    backend: LMDB
  }
}
layer {
  name: "mnist"
  type: "Data"
  top: "data"
  top: "label"
  include {
    phase: TEST   //测试
  }
  transform_param {
    scale: 0.00390625
  }
  data_param {
    source: "examples/mnist/mnist_test_lmdb" //测试数据图片路径
    batch_size: 100
    backend: LMDB
  }
}
layer {
  name: "conv1"   //卷积神经网络的第一层,卷积层
  type: "Convolution"  //这层操作为卷积
  bottom: "data"   //这一层的前一层是data层
  top: "conv1"   //
  param {
    lr_mult: 1   
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 20    //定义输出特征图个数
    kernel_size: 5    //定义卷积核大小
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "pool1"
  type: "Pooling"      //池化层,这一层的操作为池化
  bottom: "conv1"   //这一层的前面一层名字为:conv1
  top: "pool1"
  pooling_param {
    pool: MAX   //最大池化
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "conv2"
  type: "Convolution"
  bottom: "pool1"
  top: "conv2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  convolution_param {
    num_output: 50
    kernel_size: 5
    stride: 1
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "pool2"
  type: "Pooling"
  bottom: "conv2"
  top: "pool2"
  pooling_param {
    pool: MAX
    kernel_size: 2
    stride: 2
  }
}
layer {
  name: "ip1"
  type: "InnerProduct"
  bottom: "pool2"
  top: "ip1"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 500
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "relu1"
  type: "ReLU"
  bottom: "ip1"
  top: "ip1"
}
layer {
  name: "ip2"
  type: "InnerProduct"
  bottom: "ip1"
  top: "ip2"
  param {
    lr_mult: 1
  }
  param {
    lr_mult: 2
  }
  inner_product_param {
    num_output: 10
    weight_filler {
      type: "xavier"
    }
    bias_filler {
      type: "constant"
    }
  }
}
layer {
  name: "accuracy"
  type: "Accuracy"
  bottom: "ip2"
  bottom: "label"
  top: "accuracy"
  include {
    phase: TEST
  }
}
layer {
  name: "loss"
  type: "SoftmaxWithLoss"
  bottom: "ip2"
  bottom: "label"
  top: "loss"

}</span>

上面的网络结构,定义的data层,就是定义我们输入的训练数据的路径、图片变换等。

3、网络求解文件,这个文件我们喜欢把它取名为:solver.prototxt,这个文件的后缀格式也是.prototxt。这个文件主要包含了一些求解网络,梯度下降参数、迭代次数等参数……,看下手写字体的solver.prototxt文件:

<span style="font-size:18px;">net: "examples/mnist/lenet_train_test.prototxt"  //定义网络结构文件,也就是我们上一步编写的文件
 
test_iter: 100 
 
test_interval: 500 //每隔500次用测试数据,做一次验证
 
base_lr: 0.01     //学习率
momentum: 0.9   //动量参数
weight_decay: 0.0005   //权重衰减系数
 
lr_policy: "inv"   //梯度下降的相关优化策略
gamma: 0.0001
power: 0.75
 
display: 100
 
max_iter: 10000   //最大迭代次数
 
snapshot: 5000    //每迭代5000次,保存一次结果
snapshot_prefix: "examples/mnist/lenet" //保存结果路径
 

solver_mode: GPU   //训练硬件设备选择GPU还是CPU</span>

这个文件的输入就是我们前面一步定义的网络结构。

4、编写网络求解文件后,我们可以说已经完成了CNN网络的编写。接着我们需要把这个文件,作为caffe的输入参数,调用caffe可执行文件,进行训练就可以了。具体的命令如下:

./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt

然后solver就是我们在步骤3编写的solver文件了,只要在ubuntu终端输入上面的命令,就可以开始训练了。


回想一下文件调用过程:首先caffe可执行文件,调用了solver.prototxt文件,而这个文件又调用了网络结构文件lenet_train_test.prototxt,然后lenet_train_test.prototxt文件里面又会调用输入的训练图片数据等。因此我们如果要训练自己的模型,需要备好3个文件:数据文件lmdb(该文件包含寻数据)、网络结构lenet_train_test.prototxt、求解文件solver.prototxt,这几个文件名随便,但是文件后缀格式不要随便乱改。把这三个文件放在同一个目录下,然后在终端输入命令,调用caffe就可以开始训练了。

原文地址http://blog.csdn.net/hjimce/article/details/48933813

细分流程:

1.下载数据集

2.下载的原始数据转换为LMVB或是LEVELDB

3.修改网络描述文件train.prototxt

4.修改超参数文件solver.prototxt

5.训练模型

6.准备测试图片

7.生成均值文件

8.准备标签

9.测试分类效果

 
 

猜你喜欢

转载自blog.csdn.net/qq_37124237/article/details/80925841