学习搭建自己的网络MNIST在caffe上训练学习
来源:互联网 发布:网络安全管理指导思想 编辑:程序博客网 时间:2024/05/22 05:22
参照薛开宇的学习笔记学习,全文几乎是跟着他的方法走的,只是贴出自己的一些错误和不同的地方。
1 准备数据库:MNST手写字体库
./get_mnist.sh./creat_mnist.sh
之后会出现mnist-train-lmdb、mnist-val-lmdb两个文件夹
2 训练模型的解释
我们将使用 LeNet 的训练网络,这是一
个被认为在数字分类任务中运行很好的网络,我们会运用一个和原始版本稍微不同的版本,
这次用 ReLU(线性纠正函数)取代 sigmoid 函数去激活神经元这次设计包含 CNNs 的精髓,即像训练 imageNet 那样也是运用较大的训练模型。一般来说,由一层卷基层后跟着池层,然后再是卷基层,最后两个全连接层开始于传统的多层感知器,我们在 CAFFE_ROOT/data/lenet.prototxt.中已经定义了层
3 定义MNIST训练网络
这部分介绍如何使用 lenet_train.prototxt,我们假设您已经熟悉 Google Protobuf(主要作
用是把某种数据结构的信息,以某种格式保存起来。主要用于数据存储、传输协议格式等场
合。
)
,同时假设已经阅读了 caffe 中的 protobuf 定义(可以在 src/caffe/proto/caffe.proto.找到)
这个文档可以在我们建立自己的网络时,方便我们查到我们需要的格式。我们将尝试写一个 caffe 网络参数 protubuf,先观察一下传统的网络,但实际上 caffe 上的对这个网络有点改变,例如 C1 层是 20 个feature maps,第 C3 层是 50 个,C5 层是 500 个,没有 F6 层,直接是 OUTPUT 层。
这篇文章主要还是弄清楚网络定义中的这些代码的意思。
#命名name:"LeNet"#定义数据层layer{#输入层的名字 name:"mnist"#数据类型 type:DATA#数据参数 data_param{#数据来源 source:"mnist-train-lmdb"#批次大小64,一次处理64条数据,其实我的机器只能处理4条 batch_size:64#我们需要把输入像素灰度归一化,所以尺度为1/256 scale:0.00390625 }#连接data和label Blob空间 top:"data" top:"label"}#接下来是卷积层layer{#名称 name:"conv1"#类型 type:CONVOLUTION#这层前面使用data,后面生产conv1的Blob空间 bottom:"data" top:"conv1"#学习率调整的参数,我们设置权重学习率和运行中求解器给出的学习率一样,同样是偏置学习率的两倍 blobs_lr:1 blobs_lr:2#卷积层的参数convolution_param{#输出单元数 num_output:20#卷积核的大小5*5 kernel_size:5#步长为1 stride:1#网络允许我们随机初始化权重和偏置值 weight_filter{#使用xavier算法自动确定基于输入和输出神经元数量的初始化规模 type:"xavier" } bias_filter{#偏置值初始化为常数,默认为0 type:"constant" } }}#定义pooling层layer{name:"pool1"type:POOLING#这层前面使用conv1,后面生成pool1的Blob空间bottom:"conv1"top:"pool1"pooling_param{#pooling的方式是MAX pool:MAX kernel_size:2 tride:2}}#第二个卷积层layer{name:"conv2"type:CONVOLUTION#这层前面使用pool1,后面生成conv2的Blob空间bottom:"pool1"top:"conv2"blobs_lr:1blobs_lr:2convolution_param{ num_output:50 kernel_size:5 stride:1 weight_filter{ type:"xavier" } bias_filter{ type:"constant" } }}#第二个pooling层layer{name:"pool2"type:POOLINGbottom:"conv2"top:"pool2"pooling_param{ pool:MAX kenel_size:2 stride:2 }}#全连接层layer{name:"ip1"type:INNER_PRODUCTblobs_lr:1blobs_lr:2inner_product_param{#输出500个节点,在一定范围内节点越多正确率越高 num_output:500 weight_filter{ type:"xavier" } bias_filter{ type:"constant" } }bottom:"pool2"top:"ip1"}#ReLU层,由于是元素级的操作,我们可以利用现场激活来节省内存layers{name:"relu1"type:RELUbottom:"ip1"top:"ip1"}#全连接层layers{name:"ip2"type:INNER_PRODUCTblobs_lr:1blobs_lr:2inner_product_param{ num_ouput:10 weight_filter{ type:"xavier" } bias_filter{ type:"constant" }}bottom:"ip1"top:"ip2"}#LOSS层,该softmax_loss层同时实现了softmax和多项Logistic损失,即节省了时间又提高了数据的稳定性。他需要两块,第一块预测,第二块提供标签。它不产生任何输出,它做的是计算损失函数值,在BP算法运行的时候使用,启动相对与ip2的梯度。layers{name:"loss"type:SOFTMAX_LOSSbottom:"ip2"top:"label"}
#定义训练数据来源train_net:"lenet_train_mine.prototxt"#定义检测数据来源test_net:"lenet_test.prototxt"#训练的批次为100,迭代次数100,这样覆盖了10000张测试图片(100*100)test_iter:100#每迭代500次测试一次test_interval:500#学习率,动量,权重的递减base_lr:0.01momentum:0.9weight_decay:0.0005#学习策略inv,cifar10用固定学习率,imageNet每步递减学习率lr_policy:"inv1"gamma:0.0001power:0.75#每迭代100次显示一次display:100#最大迭代次数max_iter:10000#每5000次迭代存储一次数据到电脑,名字是lenetsnapshot:5000snapshot_prefix:"lenet"#0为CPU,1为GPU训练sover_mode:1
- 学习搭建自己的网络MNIST在caffe上训练学习
- 【caffe学习笔记二】学习搭建自己的网络 MNIST 在 caffe 上进行训练与学习
- Caffe_Windows学习笔记(三)搭建自己的网络mnist在caffe上进行训练与学习
- Windows Caffe 学习笔记(四)搭建自己的网络,训练和测试MNIST手写字体库
- MNIST在caffe上的训练与学习
- Windows Caffe 学习笔记(三)在Caffe上训练和测试自己的数据
- Caffe学习之训练mnist
- 【caffe-Windows】caffe在Windows下训练深度学习网络并测试(以mnist为例)
- 用Caffe在MNIST上训练LeNet
- 在caffe平台上搭建自己的网络
- mnist数据集在caffe(windows)上的训练与测试及对自己手写数字的分类
- caffe学习笔记:mnist数据集的训练和测试
- CIFAR-10 在Caffe上训练学习
- Matconvnet学习——利用mnist网络训练自己的数据分辨左右手
- Caffe学习笔记1:linux下建立自己的数据库训练和测试caffe中已有网络
- Caffe学习(3):训练自己的数据
- caffe示例实现之8在MNIST数据上训练与测试siamese网络
- 【神经网络与深度学习】在Windows8.1上用VS2013编译Caffe并训练和分类自己的图片
- 双目测距与三维重建的OpenCV实现问题集锦(四)三维重建与OpenGL显示
- Opencv 使用Rect选取与设置窗口ROI
- 集合框架的使用---Majority Number III
- iOS 开发源码的地址
- 设计模式之:策略模式(strategy)
- 学习搭建自己的网络MNIST在caffe上训练学习
- 加锁类
- 64位服务器32位plsql使用问题
- usb之Android_probe
- Spring整合Quartz实现动态定时任务
- 51NOD 1432 独木舟
- ES6学习——生成器(Generators):生成器中的this与super
- Integer
- fflush(stdin)引起的问题