caffe简单运行所需的文件——lenet

在ubuntu系统下,如何使用caffe,首先要有一个求解文件,一个网络文件。

以mnist为例,首先是lenet_solver.prototxt文件,求解文件的内容
位置:~/caffe-master/example/mnist/lenet_solver.prototxt

solver: “examples/mnist/lenet_solver.prototxt” #求解文件

test_iter: 100  #每次测试一百个

test_interval: 500 #每隔五百个测试一次

base_lr: 0.01 #学习率
momentum: 0.9 #动量参数
weight_decay: 0.0005 #权重衰减系数

lr_policy: "inv" #梯度下降的相关优化策略
gamma: 0.0001
power: 0.75

display: 100 #每迭代100次显示一次

max_iter: 10000 #最大迭代次数 snapshot: 5000 #每5000次保存一次快照(快照可以接着训练) snapshot_prefix: "examples/mnist/lenet" #快照保存路径和开头名称 solver_mode: GPU #求解模式,使用CPU或者GPU

上面的net指向的是网络文件,还是以mnist为例,net文件是lenet_train_test.prototxt,训练和测试都用这个网络
位置:~/caffe-master/example/mnist/lenet_train_test.prototxt

net: “examples/mnist/lenet_train_test.prototxt” #读取网络的路径

name: "LeNet" #网络名称
layer {
  name: "mnist" #层名
  type: "Data" #本层的数据类型
  top: "data" #下一层是data层
  top: "label" #下一层是label层
  include {
    phase: TRAIN   #在trian阶段使用
  }
  transform_param {  #改变参数
    scale: 0.00390625 #改变的比例,所用图片乘以scale,就是1/255,图片归一化
  }
  data_param {
    **source: "examples/mnist/mnist_train_lmdb"** #训练数据路径
    batch_size: 64 #每次训练64张图片
    backend: LMDB #数据格式是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" #层名称是conv1
  type: "Convolution" #层类型是卷积
  bottom: "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" #层名为pool1
  type: "Pooling" #层类型为池化
  bottom: "conv1" #上一层是conv1
  top: "pool1" #下一层是pool1
  pooling_param { #池化参数
    pool: MAX #池化类型为最大池化
    kernel_size: 2 #池化核大小为2
    stride: 2 #步长为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" 
  #激活函数,
  #在标准的ReLU激活函数中,当输入为x时,如果x>0,则输出 x,如果输入<=0,则输出0,即输出为max(0,x).在非标准的ReLU激活函数中,当输入x<=0时, 输出为x * negative_slop(它是一个参数,默认为0).
  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" #loss层,计算loss,计算方式为SoftmaxWithLoss
  bottom: "ip2"
  bottom: "label"
  top: "loss"
}

上面一个net文件需要的是两个数据来源,必须为LMDB格式的,可以用~/caffe-master/examples/mnist/create_mnist.sh来创建。

如果想用自己的图片来创建LMDB格式,那么用
~/caffe-master/examples/imagenet/create_imagenet.sh来创建

路径顺着填就好,

RESIZE=false
if $RESIZE; then
  RESIZE_HEIGHT=128
  RESIZE_WIDTH=128
else
  RESIZE_HEIGHT=0
  RESIZE_WIDTH=0
fi

这一串是统一图片尺寸,为128*128

还可以
GLOG_logtostderr=1 $TOOLS/convert_imageset \

--resize_height=$RESIZE_HEIGHT \
--resize_width=$RESIZE_WIDTH \
---shuffle=true \   #加上这个随机改变图片顺序

这样就可以改变图片的输入顺序


最后编写一个训练脚本train_lenet.sh

#!/usr/bin/env sh
set -e

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

一定要在caffe的根目录下运行,~/caffe-master

训练可以用快照恢复,改动train_lenet.sh

#!/usr/bin/env sh

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

训练完后测试训练结果,编写test_lenet.sh

#!/usr/bin/env sh
./build/tools/caffe test 
--model=examples/catdog/lenet_train_test.prototxt 
--weights=examples/catdog/lenet_iter_27791.caffemodel -iterations 100
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值