CNN+caffe学习4:自己训练网络全过程

源链接https://blog.csdn.net/baidu_17806763/article/details/54289117


本问创建于2017年1月。由于caffe版本更新, 可能部分操作已经过时不能使用,希望大家多看源码,增强自主学习能力。

资料下载地址:https://github.com/EmmaW8/caffe.git 
branch选择201701,code文件夹里面是需要用到的执行文件,models里面是我自己设计的5层CNN模型配置文件,以及训练结果。

1. 准备数据

2. 数据分类

get-filename-label.py文件 
我的文件路径比较复杂,此处很麻烦,如果你不用我的数据,可以不用我这个执行文件,自己写一个就好,很easy~ 
注意修改内部数据文件路径

$ python get-filename-label.py
  • 1

会生成3个文件,分别为train.txt,val.txt,test.txt. 
train和val里面有label,训练用,test无label,分类时用。 
train:val=9:1,你也可以尝试4:1.

这里其实很简单,就是获取数据路径名称,以及其label,我的文件仅供参考,可以根据这个写出你自己的Python提取文件。

3. 生成lmdb文件,生成均值文件(mean.binaryproto)

creat_atypia.sh文件 
修改DATA路径。 
运行:

$ sh creat_atypia.sh
  • 1

生成3个lmdb文件和一个mean文件,这里用到caffe自己提供的工具来生成。 
示例;

echo "Creating train lmdb..."

GLOG_logtostderr=1 $TOOLS/convert_imageset \
    --resize_height=$RESIZE_HEIGHT \
    --resize_width=$RESIZE_WIDTH \
    --shuffle \
    $TRAIN_DATA_ROOT \
    $DATA/train.txt \
    $DATA/atypia_train_initialsize_$DBTYPE
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

利用convert_imageset来生成lmdb文件

echo "Computing image mean..."

$TOOLS/compute_image_mean -backend=$DBTYPE \
  $DATA/atypia_train_initialsize_$DBTYPE $DATA/initialsize_mean.binaryproto
  • 1
  • 2
  • 3
  • 4
  • 5

利用compute_image_mean和刚生成的train_lmdb文件生成mean文件。

4. 自己设计网络结构

我设计的网络结构在models文件夹里,-solver.prototxt是solver文件,-train_val.prototxt是描述网络框架文件,*.caffemodel是我训练完毕后生成的模型文件。deploy.prototxt是用于test分类时的文件。

在训练之前,需要把solver 和 train_val.prototxt文件配置好。 
具体如何配置,请参考我的文件进行修改。注意修改路径。

此处一定要注意是layer {},还是layers{},如果定义的layer不同,那么内部的参数会不同,上次就栽在这个坑里了。layers里面的type都是大写的,并且param的设置不同。一个prototxt文档里,只能出现一种,不能layer和layers混用。

5. 训练

执行code里面的可执行文件train-atypia.sh

$ sh train-atypia.sh
  • 1

开始训练。

文件说明

#!/usr/bin/env sh
# begin train

set -e
# 指定log文件路径和名称
LOG=/home/emma/software/caffe/models/atypia/log/train-`date +%Y-%M-%d-%H-%M-%S`.log
#指定一些变量名,便于后续开发
TOOLS=/home/emma/software/caffe/build/tools
MODEL=/home/emma/software/caffe/models/atypia
NAME=atypia
# fine-tune 别人的模型,此处不需要
#$TOOLS/caffe train  -solver $MODEL/$NAME-solver.prototxt  -weights $MODEL/VGG_16_layers.caffemodel -gpu 0 > VGG2.log
# 训练自己的模型,并将控制台输出导入到log文件
$TOOLS/caffe train -solver $MODEL/$NAME-solver.prototxt -gpu 0 2>&1 | tee $LOG
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

6. 可视化,画出训练loss,以及test accuracy

训练完毕后,可以得到log文件,我的log文件位于models/log/ 
对log文件进行处理,提取出accuracy和loss的数值,然后画图。 
可执行文件:plot.sh

./plot_training_log.py.example 0 /home/emma/software/caffe/models/atypia/log/curve/test_accuracy.png /home/emma/software/caffe/models/atypia/log/train-2017-52-07-19-52-39.log
  • 1

0:代表画出test_accuracy 和iters的曲线 
2:代表画出test_loss和iters的曲线 
6:代表画出train_loss 和iters的曲线

第二个参数是,图片保存位置,第三个参数log文件所在的位置

我生成的曲线存储在models/log/curve里面,例如 
这里写图片描述

注意事项:

如果loss未收敛,记得及时调整学习率。

第一次使用自己设计的网络时,选择10个训练数据,并且训练数据=val数据集,看一下训练几次后准确率是否会达到100%,如果会,就说明模型可用!!!


EMMA 
SIAT

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_17806763/article/details/54289117
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值