caffe学习笔记5 -- Alex’s CIFAR-10 tutorial, Caffe style
来源:互联网 发布:ubuntu 16.04怎么翻墙 编辑:程序博客网 时间:2024/05/04 14:35
这是caffe官网中Examples中的第三个例子,链接地址:http://caffe.berkeleyvision.org/gathered/examples/cifar10.html
这个例子重现了Alex Krizhevsky的cuda-convnet中的结果,具体的模型定义、参数、训练步骤等都是按照cuda-convnet中的进行设置的。
数据集描述:CIFAR-10数据集包含60000张32*32的彩色图像,包含10类,每类6000张图片,50000张训练样本图片,10000张测试样本图片。 图片类型:airplane, bird, car, cat, deer, dog, horse, monkey, ship, truck.
下面进入训练阶段
1. 获取数据:
进入caffe根目录,运行
./data/cifar10/get_cifar10.sh./examples/cifar10/create_cifar10.sh
看一下这两个文件里写了什么内容
get_cifar10.sh : 获取数据
#!/usr/bin/env sh# This scripts downloads the CIFAR10 (binary version) data and unzips it.DIR="$( cd "$(dirname "$0")" ; pwd -P )"cd $DIRecho "Downloading..."wget --no-check-certificate http://www.cs.toronto.edu/~kriz/cifar-10-binary.tar.gz #下载数据echo "Unzipping..."tar -xf cifar-10-binary.tar.gz && rm -f cifar-10-binary.tar.gz #对数据解压,删除压缩包mv cifar-10-batches-bin/* . && rm -rf cifar-10-batches-bin# Creation is split out because leveldb sometimes causes segfault# and needs to be re-created.echo "Done."
create_cifar10.sh: 生成lmdb文件并计算平均值,执行该文件后,会生成两个文件
#!/usr/bin/env sh# This script converts the cifar data into leveldb format.EXAMPLE=examples/cifar10DATA=data/cifar10DBTYPE=lmdb #转换为lmdbecho "Creating $DBTYPE..."rm -rf $EXAMPLE/cifar10_train_$DBTYPE $EXAMPLE/cifar10_test_$DBTYPE./build/examples/cifar10/convert_cifar_data.bin $DATA $EXAMPLE $DBTYPE #调用convert_cifar_data.bin. 这个文件由convert_cifai_data.cpp生成,他需要三个输入值:数据存储路径,生成数据文件存放位置,生成文件格式(lmdb,或 leveldb)。echo "Computing image mean..."./build/tools/compute_image_mean -backend=$DBTYPE \ #调用compute_image_mean计对图像做均值处理,这个函数源于src/tools/compute_image_mean.cpp,需要三个传入参数:转换后文件的格式,转换后文件路径和生成的均值二进制文件 $EXAMPLE/cifar10_train_$DBTYPE $EXAMPLE/mean.binaryproto echo "Done."
2. 使用模型:
网络结构模型
name: "CIFAR10_quick_test"input: "data"input_shape { dim: 1 # num dim: 3 #通道数 dim: 32 #图像的长和宽 dim: 32}layer { name: "conv1" type: "Convolution" bottom: "data" top: "conv1" param { lr_mult: 1 #权重w的学习率倍数 } param { lr_mult: 2 #偏置b的学习率倍数 } convolution_param { num_output: 32 pad: 2 #加边为2 kernel_size: 5 stride: 1 }}layer { name: "pool1" type: "Pooling" bottom: "conv1" top: "pool1" pooling_param { pool: MAX #Max Pooling kernel_size: 3 stride: 2 }}layer { name: "relu1" type: "ReLU" bottom: "pool1" top: "pool1"}layer { name: "conv2" type: "Convolution" bottom: "pool1" top: "conv2" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 32 pad: 2 kernel_size: 5 stride: 1 }}layer { name: "relu2" type: "ReLU" bottom: "conv2" top: "conv2"}layer { name: "pool2" type: "Pooling" bottom: "conv2" top: "pool2" pooling_param { pool: AVE #均值池化 kernel_size: 3 stride: 2 }}layer { name: "conv3" type: "Convolution" bottom: "pool2" top: "conv3" param { lr_mult: 1 } param { lr_mult: 2 } convolution_param { num_output: 64 pad: 2 kernel_size: 5 stride: 1 }}layer { name: "relu3" type: "ReLU" # 使用ReLU激励函数,这里需要注意的是,本层的bottom和top都是conv3. bottom: "conv3" top: "conv3"}layer { name: "pool3" type: "Pooling" bottom: "conv3" top: "pool3" pooling_param { pool: AVE kernel_size: 3 stride: 2 }}layer { name: "ip1" type: "InnerProduct" bottom: "pool3" top: "ip1" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 64 }}layer { name: "ip2" type: "InnerProduct" bottom: "ip1" top: "ip2" param { lr_mult: 1 } param { lr_mult: 2 } inner_product_param { num_output: 10 }}layer { name: "prob" type: "Softmax" bottom: "ip2" top: "prob"}
solver结构
# reduce the learning rate after 8 epochs (4000 iters) by a factor of 10# The train/test net protocol buffer definitionnet: "examples/cifar10/cifar10_quick_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.test_iter: 100 #test迭代次数# Carry out testing every 500 training iterations.test_interval: 500 #每迭代500此测试一次# The base learning rate, momentum and the weight decay of the network.base_lr: 0.001 #基础学习率momentum: 0.9weight_decay: 0.004# The learning rate policylr_policy: "fixed"# Display every 100 iterationsdisplay: 100# The maximum number of iterationsmax_iter: 4000# snapshot intermediate resultssnapshot: 4000 # 存储中间结果snapshot_format: HDF5 #存储格式snapshot_prefix: "examples/cifar10/cifar10_quick"# solver mode: CPU or GPUsolver_mode: GPU
对于学习率的影响,在Simon Haykin的《神经网络与及其学习》中说道(中文版p86):反向传播算法提供使用最速下降方法在权值空间计算得到的轨迹的一种近似,使用的参数越小,从一次迭代到下一次迭代的网络突触权值的变化量就越小,轨迹在权值空间就越光滑,然而,这种改进是以减慢学习速度为代价的。另一方面,如果学习率的值太大,学习速度加快,就可能使网络的权值变化量不稳定。
3. 训练
执行
./examples/cifar10/train_quick.sh
训练数据,输出形式类似与mnist训练的形式,这里不重复。
训练结果的正确率大约在75%
1 0
- caffe学习笔记5 -- Alex’s CIFAR-10 tutorial, Caffe style
- caffe教程翻译:Alex’s CIFAR-10 tutorial, Caffe style
- Caffe学习-CIFAR-10
- caffe学习:CIFAR-10
- caffe学习(2): Cifar-100 tutorial
- Windows Caffe 学习笔记 CIFAR-10数据的格式转换
- Caffe学习(1): Caffe Tutorial阅读笔记
- caffe学习笔记tutorial:Layers
- CIFAR-10 在Caffe上训练学习
- caffe学习(一):CIFAR-10
- caffe CIFAR-10
- caffe CIFAR 10 database
- Windows Caffe 学习笔记(零)CIFAR-10数据的格式转换
- Windows Caffe 学习笔记(一)训练和测试CIFAR-10数据集
- Caffe学习记录:Cifar-10 自定义网络训练记录
- Caffe学习记录:Cifar-10 自定义网络训练记录
- caffe学习(二) CIFAR-10数据集上训练
- CIFAR-10在caffe上进行训练与学习
- eclipse|studio 导出hprof 后用MAT显示报错Unknown HPROF Version
- datetime使用笔记
- Android RecyclerView横向滑动
- 免费便捷的技术分享
- Android ViewPager
- caffe学习笔记5 -- Alex’s CIFAR-10 tutorial, Caffe style
- iOS开发——app的五种生命周期状态
- iOS检查继承关系
- 性能术语和指标
- OC 自动生成分类属性方法
- 微信之旅——js安全域名接口
- leetcode 304. Range Sum Query 2D - Immutable
- C语言或者Object-C交换两个数的值
- python 用生成器生成斐波那契数列