caffe学习笔记(一):mnist

caffe-mnist实例的官方链接http://caffe.berkeleyvision.org/gathered/examples/mnist.html
1、在安装成功caffe的基础上运行mnist实例
2、准备数据
首先需要从MNIST网站上下载和改变数据格式,运行一下命令
cd CAFFEROOT./data/mnist/getmnist.sh./examples/mnist/createmnist.shwgetgunzipmnisttrainlmdb,mnisttestlmdb.3MNISTLeNetLeNetRelusigmoidLeNetCNNImageNetpooling CAFFE_ROOT/examples/mnist/lenet_train_test.prototxt
4、定义MNIST网络
lenet_train_test.prototxt定义详细,我们假设你液晶熟悉Google Prorobuf 和假设已经读过protobuf定义,这些可以
在 $CAFFE_ROOT/src/caffe/proto/caffe.proto中找到。
尤其是,我们将要写一个caffe::NetParameter protobuf,从给神经网络名字开始:name: “LeNet”

5、写数据层
我们将会读mnist数据从lmdb(PS caffe只能读取lmdb和。。),数据层:
layers {
name: “mnist”
type: DATA
data_param {
source: “mnist_train_lmdb”
backend: LMDB
batch_size: 64
scale: 0.00390625
}
top: “data”
top: “label”
}
(PS:前两行是属性,定义了层名称、层类型,而后半部分是各种参数,输入像素范围是[0,1),scale=1/256,这一层输出两个blob,data and label,blb:Blob是用以存储数据的4维数组,例如对于数据:Number*Channel*Height*Width;对于卷积权重:Output*Input*Height*Width;对于卷积偏置:Output*1*1*1)

6、写卷积层
卷基层定义:
layers {
name: “conv1”
type: CONVOLUTION
blobs_lr: 1.
blobs_lr: 2.
convolution_param {
num_output: 20
kernelsize: 5
stride: 1 %步数
weight_filler {
type: “xavier”
}
bias_filler {
type: “constant”
}
}
bottom: “data”
top: “conv1”
}
这个fillers允许我们随意初始化weights和bias的值。对于权重filler,使用xavier算法去随机定义初始化的scale基于输入输出神经元。对于bias filler,我们将会简单的初始化他为常量,默认值是0。
blob_lr是层可学习的元素,学习速率。权重学习速率和给予的solver during runtime,bias学习熟虑是两倍的权重学习速率。

7、写Pooling 层
定义:
layers {
name: “pool1”
type: POOLING
pooling_param {
kernel_size: 2
stride: 2
pool: MAX
}
bottom: “conv1”
top: “pool1”
}
max pooling、stride 2、pool kernel size 2,所以在相近pooling区域之间没有重叠部分
相同的,我们可以写第二个卷基层,pooling层,在中有详细描述
$CAFFE_ROOT/examples/mnist/lenet_train_test.prototxt

8、写全连接层
layers {
name: “ip1”
type: INNER_PRODUCT
blobs_lr: 1.
blobs_lr: 2.
inner_product_param {
num_output: 500
weight_filler {
type: “xavier”
}
bias_filler {
type: “constant”
}
}
bottom: “pool2”
top: “ip1”
}
这个定义了一个全连接层有500个输出

9、写ReLu层
layers {
name: “relu1”
type: RELU
bottom: “ip1”
top: “ip1”
}

10、在Relu层后接着另外一个全连接层
layers {
name: “ip2”
type: INNER_PRODUCT
blobs_lr: 1.
blobs_lr: 2.
inner_product_param {
num_output: 10
weight_filler {
type: “xavier”
}
bias_filler {
type: “constant”
}
}
bottom: “ip1”
top: “ip2”
}
11、损失层
layers {
name: “loss”
type: SOFTMAX_LOSS
bottom: “ip2”
bottom: “label”
}
包含softmax和多回归损失,有两个blob,预测和数据层提供的label。
12、Additional Notes: Writing Layer Rules
层定义可以包括定义
layers {
// …layer definition…
include: { phase: TRAIN }
}
控制层包含在网络中,基于当前的网络状态。层规则和模型模式参考 CAFFEROOT/src/caffe/proto/caffe.proto13MNISTprototxt CAFFE_ROOT/examples/mnist/lenet_solver.prototxt:
14、训练和测试模型
在写过网络定义protobuf和solver protobuf后,训练模型是简单的,只要运行或者下面的命令
cd $CAFFE_ROOT
./examples/mnist/train_lenet.sh
运行以后,会出现如下的信息
I1203 net.cpp:66] Creating Layer conv1
I1203 net.cpp:76] conv1 <- data
I1203 net.cpp:101] conv1 -> conv1
I1203 net.cpp:116] Top shape: 20 24 24
I1203 net.cpp:127] conv1 needs backward computation.
这新信息告诉你每一层详细的信息,他们连接和输出的类型,在初始化以后,训练开始
I1203 net.cpp:142] Network initialization done.
I1203 solver.cpp:36] Solver scaffolding done.
I1203 solver.cpp:44] Solving LeNet
基于solver setting,将会打印100次迭代后的损失函数和每1000次测试,可以看到这样的信息:
I1203 solver.cpp:204] Iteration 100, lr = 0.00992565
I1203 solver.cpp:66] Iteration 100, loss = 0.26044

I1203 solver.cpp:84] Testing net
I1203 solver.cpp:111] Test score #0: 0.9785
I1203 solver.cpp:111] Test score #1: 0.0606671
过几分钟,就做好了:
I1203 solver.cpp:84] Testing net
I1203 solver.cpp:111] Test score #0: 0.9897
I1203 solver.cpp:111] Test score #1: 0.0324599
I1203 solver.cpp:126] Snapshotting to lenet_iter_10000
I1203 solver.cpp:133] Snapshotting solver state to lenet_iter_10000.solverstate
I1203 solver.cpp:78] Optimization Done.
最后模型,存数的二进制protobuf 文件,存储在lenet_iter_10000

如果想在GPU下运行计算,只需要修改lenet_solver.prototxt文件的solver_mode即可,0是CPU,1是GPU。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值