先从一个具体的例子来开始Caffe,以MNIST手写数据为例。

1.下载数据

下载mnist到caffe-master\data\mnist文件夹。

THE MNIST DATABASE:Yann LeCun et al.

train-images-idx3-ubyte.gz:  training set images (9912422 bytes)

 train-labels-idx1-ubyte.gz:  training set labels (28881 bytes)

 t10k-images-idx3-ubyte.gz:   test set images (1648877 bytes)

 t10k-labels-idx1-ubyte.gz:   test set labels (4542 bytes)

2.生成lmdb文件

使用convert_mnist_data project转换数据。

打开Caffe.sln,设置convert_mnist_data为启动项目,修改convert_mnist_data.cpp中代码。

在main函数中设置了转换数据的路径,具体的代码如下:

    //get mnist train and test lmdb data By Xiaopan Lyu=====================
    argc = 4;
    argv[0] = "lmdb";
    //convert train mnist data=============================================    
    argv[1] = "../../data/mnist/train-images.idx3-ubyte";
    argv[2] = "../../data/mnist/train-labels.idx1-ubyte";
    argv[3] = "../../data/mnist/mnist_train_lmdb";
 
    //convert test mnist data=============================================    
    argv[1] = "../../data/mnist/t10k-images.idx3-ubyte";
    argv[2] = "../../data/mnist/t10k-labels.idx1-ubyte";
    argv[3] = "../../data/mnist/mnist_test_lmdb";
    //======================================================================

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

这段代码在main函数中的位置如下:

int main(int argc, char** argv) {
#ifndef GFLAGS_GFLAGS_H_
    namespace gflags = google;
#endif
 
    FLAGS_alsologtostderr = 1;
 
    //get mnist train and test lmdb data By Xiaopan Lyu=====================
    argc = 4;
    argv[0] = "lmdb";
    //convert train mnist data=============================================    
    argv[1] = "../../data/mnist/train-images.idx3-ubyte";
    argv[2] = "../../data/mnist/train-labels.idx1-ubyte";
    argv[3] = "../../data/mnist/mnist_train_lmdb";
 
    //convert test mnist data=============================================    
    argv[1] = "../../data/mnist/t10k-images.idx3-ubyte";
    argv[2] = "../../data/mnist/t10k-labels.idx1-ubyte";
    argv[3] = "../../data/mnist/mnist_test_lmdb";
    //======================================================================
 
    gflags::SetUsageMessage("This script converts the MNIST dataset to\n"
        "the lmdb/leveldb format used by Caffe to load data.\n"
        "Usage:\n"
        "    convert_mnist_data [FLAGS] input_image_file input_label_file "
        "output_db_file\n"
        "The MNIST dataset could be downloaded at\n"
        "    http://yann.lecun.com/exdb/mnist/\n"
        "You should gunzip them after downloading,"
        "or directly use data/mnist/get_mnist.sh\n");
    gflags::ParseCommandLineFlags(&argc, &argv, true);
 
    const string& db_backend = FLAGS_backend;
 
    if (argc != 4) {
        gflags::ShowUsageWithFlagsRestrict(argv[0],
            "examples/mnist/convert_mnist_data");
    }
    else {
        google::InitGoogleLogging(argv[0]);
        convert_dataset(argv[1], argv[2], argv[3], db_backend);
    }
    system("pause");
    return 0;
}

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

两次运行代码,分别得到train和test data。

get mnist_train_lmdb

get mnist_test_lmdb

Notes.

1)argv[0]、argv[1]、argv[2]、argv[3]分别表示的含义:[FLAGS]     input_image_file    input_label_file    output_db_file.

2)output_db_file设置中最后的一级文件夹不要事先自己建立好,代码中不支持覆盖,如果存在文件夹会报错。

3)这些路径的设置是在debug模式下,文件的层级是以当前的.cpp文件为基础的,与实际EXE文件有所不同。

3.配置网络为TRAIN模式

1)配置lenet_train_test.prototxt

caffe在mnist自带的是使用lenet的网络结。lenet网络的定义在examples\mnist\lenet_train_test.prototxt文件中。

注意配置好改网络定义中的数据路径。如下所示,注意line 14&31,如果目录比较混淆,可以直接写成绝对路径。

   1:  name: "LeNet"
   2:  layer {
   3:    name: "mnist"
   4:    type: "Data"
   5:    top: "data"
   6:    top: "label"
   7:    include {
   8:      phase: TRAIN
   9:    }
  10:    transform_param {
  11:      scale: 0.00390625
  12:    }
  13:    data_param {
  14:      source: "E:/MyCode/DL/caffe-master/examples/mnist/mnist_train_lmdb"
  15:      batch_size: 64
  16:      backend: LMDB
  17:    }
  18:  }
  19:  layer {
  20:    name: "mnist"
  21:    type: "Data"
  22:    top: "data"
  23:    top: "label"
  24:    include {
  25:      phase: TEST
  26:    }
  27:    transform_param {
  28:      scale: 0.00390625
  29:    }
  30:    data_param {
  31:      source: "E:/MyCode/DL/caffe-master/examples/mnist/mnist_test_lmdb"
  32:      batch_size: 100
  33:      backend: LMDB
  34:    }
  35:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

2)配置lenet_solver.prototxt

lenet_solver.prototxt中实际上是定义了一种解决方案。

注意line 2,23&25,这三行的数据需要修改,这里也是用了绝对路径。只使用CPU训练。

   1:  # The train/test net protocol buffer definition
   2:  net: "E:/MyCode/DL/caffe-master/examples/mnist/lenet_train_test.prototxt"
   3:  # test_iter specifies how many forward passes the test should carry out.
   4:  # In the case of MNIST, we have test batch size 100 and 100 test iterations,
   5:  # covering the full 10,000 testing images.
   6:  test_iter: 100
   7:  # Carry out testing every 500 training iterations.
   8:  test_interval: 500
   9:  # The base learning rate, momentum and the weight decay of the network.
  10:  base_lr: 0.01
  11:  momentum: 0.9
  12:  weight_decay: 0.0005
  13:  # The learning rate policy
  14:  lr_policy: "inv"
  15:  gamma: 0.0001
  16:  power: 0.75
  17:  # Display every 100 iterations
  18:  display: 100
  19:  # The maximum number of iterations
  20:  max_iter: 10000
  21:  # snapshot intermediate results
  22:  snapshot: 5000
  23:  snapshot_prefix: "E:/MyCode/DL/caffe-master/examples/mnist/lenet"
  24:  # solver mode: CPU or GPU
  25:  solver_mode: CPU

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

3)修改了source code为train模式

修改了caffe.cpp文件的相关内容。增加了line15到line21的代码,顺便说一句Google的gflags解析命令行参数甚是优雅。

   1:  int main(int argc, char** argv) {
   2:      // Print output to stderr (while still logging).
   3:      FLAGS_alsologtostderr = 1;
   4:      // Set version
   5:      gflags::SetVersionString(AS_STRING(CAFFE_VERSION));
   6:      // Usage message.
   7:      gflags::SetUsageMessage("command line brew\n"
   8:          "usage: caffe <command> <args>\n\n"
   9:          "commands:\n"
  10:          "  train           train or finetune a model\n"
  11:          "  test            score a model\n"
  12:          "  device_query    show GPU diagnostic information\n"
  13:          "  time            benchmark model execution time");
  14:      // Run tool or show usage.
  15:      //train lenet By XiaopanLyu====================================================
  16:      argc = 3;
  17:      argv[0] = "caffe";
  18:      argv[1] = "train";
  19:      argv[2] = "-solver=E:/MyCode/DL/caffe-master/examples/mnist/lenet_solver.prototxt";
  20:      //argv[1] = "solver=../examples/mnist/lenet_solver.prototxt";
  21:      //=============================================================================
  22:      caffe::GlobalInit(&argc, &argv);
  23:      if (argc == 2) {
  24:  #ifdef WITH_PYTHON_LAYER
  25:          try {
  26:  #endif
  27:              return GetBrewFunction(caffe::string(argv[1]))();
  28:              system("pause");
  29:  #ifdef WITH_PYTHON_LAYER
  30:          }
  31:          catch (bp::error_already_set) {
  32:              PyErr_Print();
  33:              return 1;
  34:          }
  35:  #endif
  36:      }
  37:      else {
  38:          gflags::ShowUsageWithFlagsRestrict(argv[0], "tools/caffe");
  39:      }
  40:  }

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

4.Training LeNet

运行caffe project,mnist demo就开始运行了,以下就是运行的过程和结果。

1)运行过程

2)运行结果

运行完成后,生成了4个文件。查看lenet_solver.prototxt可知,最大迭代次数为10000次,5000次保存一次快照结果。

5.配置网络为TEST模式

修改caffe.cpp文件,增加参数配置代码

   1:      //test lenet By XiaopanLyu====================================================
   2:      argc = 5;
   3:      argv[0] = "caffe";
   4:      argv[1] = "test";
   5:      argv[2] = "-model=E:/MyCode/DL/caffe-master/examples/mnist/lenet_train_test.prototxt";
   6:      argv[3] = "-weights=E:/MyCode/DL/caffe-master/examples/mnist/lenet_iter_10000.caffemodel";
   7:      argv[4] = "-iterations=100";
   8:      //=============================================================================
   9:      caffe::GlobalInit(&argc, &argv);

.csharpcode, .csharpcode pre
{
font-size: small;
color: black;
font-family: consolas, "Courier New", courier, monospace;
background-color: #ffffff;
/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt
{
background-color: #f4f4f4;
width: 100%;
margin: 0em;
}
.csharpcode .lnum { color: #606060; }

6.Testing LeNet

用LeNet的网络配置运行mnist测试数据集,几分钟的时间得到如下效果。

迭代100次,测试数据集的准确率为99.02%。

7.NOTES

在第3、5部分,配置网络的参数可以参考Caffe的官方辅导文档:http://caffe.berkeleyvision.org/tutorial/interfaces.html

Chapter 3 Start Caffe with MNIST Demo的更多相关文章

  1. Chapter 4 深入理解Caffe MNIST DEMO中的LeNet网络模型

    明代思想家王阳明提出了"知行合一",谓认识事物的道理与在现实中运用此道理,是密不可分的一回事.我以为这样的中国哲学话语,对于学习者来说,极具启发意义,要细细体会.中华文明源远流长, ...

  2. caffe 试运行MNIST

    转自:http://www.cnblogs.com/NanShan2016/p/5469942.html 编译完caffe后,在D:\caffe\caffe-master\caffe-master\b ...

  3. windows下使用caffe测试mnist数据集

    在win10机子上装了caffe,感谢大神们的帖子,要入坑caffe-windows的朋友们看这里,还有这里,安装下来基本没什么问题. 好了,本博文写一下使用caffe测试mnist数据集的步骤. 1 ...

  4. Caffe系列4——基于Caffe的MNIST数据集训练与测试(手把手教你使用Lenet识别手写字体)

    基于Caffe的MNIST数据集训练与测试 原创:转载请注明https://www.cnblogs.com/xiaoboge/p/10688926.html  摘要 在前面的博文中,我详细介绍了Caf ...

  5. Chapter 2 Build Caffe

    Caffe for windows 的build药按照一定的顺序进行. ============================================================ 先以b ...

  6. Windows caffe 跑mnist实例

       一. 装完caffe当然要来跑跑自带的demo,在examples文件夹下. 先来试试用于手写数字识别的mnist,在 examples/mnist/ 下有需要的代码文件,但是没有图像库. mn ...

  7. 用vs2013(cpu-only)调试caffe的mnist

    在调试Mnist例子之前,首先需要用vs2013编译好caffe.详情请参见: [caffe-Windows]caffe+VS2013+Windows无GPU快速配置教程 按照上述教程编译好caffe ...

  8. 【caffe】mnist训练日志

    @tags caffe 前面根据train_lenet.sh改写了train_lenet.py后,在根目录下执行它,得到一系列输出,内容如下: I1013 10:05:16.721294 1684 c ...

  9. 使用caffe训练mnist数据集 - caffe教程实战(一)

    个人认为学习一个陌生的框架,最好从例子开始,所以我们也从一个例子开始. 学习本教程之前,你需要首先对卷积神经网络算法原理有些了解,而且安装好了caffe 卷积神经网络原理参考:http://cs231 ...

随机推荐

  1. YTU 2605: 熟悉题型——自由设计(比较大小-类模板)

    2605: 熟悉题型--自由设计(比较大小-类模板) 时间限制: 1 Sec  内存限制: 128 MB 提交: 125  解决: 107 题目描述 声明一个类模板,利用它分别实现两个整数.浮点数和字 ...

  2. POJ 1568 Find the Winning Move(极大极小搜索)

    题目链接:http://poj.org/problem?id=1568 题意:给出一个4*4的棋盘,x和o两人轮流放.先放够连续四个的赢.给定一个局面,下一个轮到x放.问x是否有必胜策略?若有,输出能 ...

  3. 总结Selenium自动化测试方法(一)自动化测试基础

    总结Selenium自动化测试方法 一.自动化测试基础 1.什么样的项目适合自动化测试 ①任务测试明确,不会频繁变动 ②每日构建后的测试验证 ③比较频繁的回归测试 ④软件系统界面稳定.变动少 ⑤需要在 ...

  4. sdut2164Binomial Coeffcients(组合数求模)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2164 贴一篇写组合数求mod比较好的帖子 这里 ...

  5. Tyvj 1030 乳草的入侵

    以一个简单的BFS对基础搜索做一个收尾好了. 给一个草,然后以这棵草为九宫格的中心,每周向周围八个方向扩散,问多少个星期能把这个农场占满. 遍历整个map,最后一个出队列的对应的星期数就是所求. // ...

  6. HDU 1058 Humble Numbers【DP】

    题意:给出丑数的定义,只含有2,3,5,7这四个素数因子的数称为素数.求第n个丑数. 可以先观察几个丑数得出规律 1:dp[1] 2:min(1*2,1*3,1*5,1*7) 3:min(2*2,1* ...

  7. oraclede chuangjian yu dajian(zhuan)

    http://wenku.baidu.com/link?url=pIKLZJ4sAurjNGjwgChqjRMhCXfn77qy1K_EW3nlGn4eN4roDN8mhSG0GakYbrTBcsD4 ...

  8. Android init.rc文件格式解析

    /***************************************************************************** * Android init.rc文件格式 ...

  9. UVALive 5713 Qin Shi Huang's National Road System秦始皇修路(MST,最小瓶颈路)

    题意: 秦始皇要在n个城市之间修路,而徐福声可以用法术位秦始皇免费修1条路,每个城市还有人口数,现要求徐福声所修之路的两城市的人口数之和A尽量大,而使n个城市互通需要修的路长B尽量短,从而使得A/B最 ...

  10. HDU 3342 Legal or Not (图是否有环)

    题意: 给出n个人的师徒关系,如有 a是b的师傅,b是c的师傅,c是a的师傅,这样则不合法,输出NO,否则输出YES. 思路: 每段关系可以看成一条有向边,从师傅指向徒弟,那么徒弟的徒子徒孙都不可能再 ...