机器学习入门级的例子,mnist手写体数字识别的训练数据库。可以通过caffe提供的这个例子来学习神经网络的模型在caffe中是如何组织 如何运行的,然后我们就可以试着去搭建自己的神经网络模型 实现相应的功能。网上有许多关于在caffe中添加层的文章 我也看了一些,但是还是觉得对于初学者来说太过复杂,所以我决定按照自己的思路来理顺 学习神经网络的过程,这其中可能会有我也不明白的地方 不过不要紧 一点点的累计 以后会懂的,但是我相信 这个认知过程应该是非常符合小白的胃口的。^-^
1.运行mnist
cd ~/caffe/caffe-master #主目录下
time sh examples/mnist/train_lenet.sh
2.设置参数 指定模型
./build/tools/caffe.bin test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu=0
实现Testing。参数说明如下:
test:表示对训练好的模型进行Testing,而不是training。其他参数包括train, time, device_query。
-model=XXX:指定模型prototxt文件,这是一个文本文件,详细描述了网络结构和数据集信息。
-weights=XXX:指定训练好的caffemodel二进制文件
-gpu=0:指定在GPU上运行,GPUID=0。如果你没有GPU就去掉这个参数,默认在CPU上运行
以上是手写字符库的运行代码,如果你跟我一样是个新手小白的话 可以跟着我的思路去试一试。
接下来要做的就是 根据mnist这个实例的运行过程 一步步抽丝剥茧 仿写一个自己的神经网络。
可以看到,第一步是 运行了 一个 .sh文件 以运行 mnist
time sh examples/mnist/train_lenet.sh
time是计时的意思 sh运行.sh 文件
那么我们打开train_lenet.sh 文件看看是个什么东西
0.0就一句话。(还以为会有一大片代码呢)
train:表示对模型进行training。其他参数包括train, time, device_query。
并指定 solver类型 具体内容写在 lenet_solver.prototxt中。
执行完这个文件就 训练好了mnist模型
因此第二步,就进行了测试。
2.设置参数 指定模型
./build/tools/caffe.bin test -model=examples/mnist/lenet_train_test.prototxt -weights=examples/mnist/lenet_iter_10000.caffemodel -gpu=0
实现Testing。参数说明如下:
test:表示对训练好的模型进行Testing,而不是training。其他参数包括train, time, device_query。
-model=XXX:指定模型prototxt文件,这是一个文本文件,详细描述了网络结构和数据集信息。
-weights=XXX:指定训练好的caffemodel二进制文件
-gpu=0:指定在GPU上运行,GPUID=0。如果你没有GPU就去掉这个参数,默认在CPU上运行
思考一下,那么当我们重写的时候,运行语句应该是类似的,测试语句也是一样的 都用到caffe的模型。不一样的地方应该就是 lenet_solver.prototxt的部分 那么我们下一步就看看 lenet_solver.prototxt这个文件长什么样子吧。测试先放一放,搞定训练再说它。
另外说一下Lenet 是一个处理mnist的非常好的网络结构。
net: "examples/mnist/lenet_train_test.prototxt"网络定义
test_iter: 100 测试的批次 mnist有一万张测试图片 100*100=10000
test_interval: 500 每五百次迭代测试一次
base_lr: 0.01 learning rate 学习速率
momentum: 0.9 冲量
weight_decay: 0.0005 weight_decay
lr_policy: "inv" 学习率变化
gamma: 0.0001 学习率变化的比率
power: 0.75
display: 100 每100层显示一次
max_iter: 10000 最大迭代次数
snapshot: 5000 每迭代500次显示状态。
snapshot_prefix: "examples/mnist/lenet"** 每迭代五百次存储一次数据到电脑 该路径下。
solver_mode: GPU GPU模式
可以看出,上面这些语句是给定了一些caffe训练时需要用到的参数,具体什么含义 我也已经查好了写在后面了,实际的应用效果目前还不知道。