约定一下,Caffe运行样例时在终端中使用的所有命令,同时终端中的目录已经cd到Caffe之中(别告诉我一个Github项目你还没有make all就直接拿过来用了)

sudo sh data/mnist/get_mnist.sh #联网获取minst数据库
sudo sh examples/mnist/create_mnist.sh #将数据转化成lmdb数据,lmdb就是一个有些类似SQL之类的东东
sudo vi examples/mnist/lenet_solver.prototxt #非必须,主要用于设置修改一些运行参数(修改后记得保存,怎么修改不在本文范围之内,姑且不提),也可将vi改成vim、gedit其他文本编辑器
sudo time sh examples/mnist/train_lenet.sh#运行程序

  以上命令是从网站直接复制过来的[1](当然我已经实验过了)为了方便说明我打算从这些命令倒序跟各位分析一下文件之间的逻辑关系。

1、train_lenet.sh:老子要运行了~~~

sudo time sh examples/mnist/train_lenet.sh
  打开train_lenet.sh,我们发现里面的代码十分的短小,有价值的就一句话:

./build/tools/caffe train --solver=examples/mnist/lenet_solver.prototxt $@

  详细解释一下,solver参数是表示指定运行参数的程序,也就是说这次训练的运行参数(比如用CPU还是GPU运行程序,网络框架设置是在哪个程序,多少次迭代后显示一次结果等)都写在这个文件里面了,那么这个.prototxt文件就是这次任务的solver。
这个时候你突然觉得.prototxt怎么这么眼熟,其实,你看第三句不就写有lenet_solver.prototxt嘛!

2、lenet_solver.prototxt:老子跟你解释三大哲学问题:网络是谁、从哪来、到哪去。

  贴出此文件中跟文件有关的相关命令

net: "examples/mnist/lenet_train_test.prototxt"
snapshot: 5000
snapshot_prefix: "examples/mnist/lenet"

  (二三句的用途简单的说类似于断点续传,每 5000 iterations就可以得到model_iter_xxx.caffemodel 和model_iter_xxx.solverstate,所以我们姑且不详细描述)
lenet_solver.prototxt作为一个solver配置文件,整个项目的核心,甚至可以当作主程序也不为过,其他的只是说算是解决的问题之一就是确定了训练网络的文件路径(径……我没写错别字吧)

3、lenet_train_test.prototxt

  到了这里已经到了文件逻辑的末尾,如果熟悉json的话阅读起来会十分容易,里面都是字典,要么就是字典嵌套着字典,就像这样

layer{
xx:xx
xx{
xxx:xx
}
}

  在这里面依然可以发现一些文件路径,其实这些路径都是lmdb的数据路径,包括测试集的文件路径和训练集的文件路径。到此终端中运行的所有命令已从最后一句倒叙到第一句。

4、总结

  整个项目,文件之间的调用是单向向前的,并没看到你调用我我调用你样、甚至搞个大循环(1s)的情况(其实作为优秀的架构来讲也不应该这样)即

Created with Raphaël 2.1.0

开始

lmdb数据文件

lenet_train_test.prototxt:网络框架

lenet_solver.prototxt:solver配置

train_lenet.sh:运行项目

结束

  刚接触Caffe时我一直弄不清楚如何Caffe的使用的正确方式,找过的blog内容很详细但是让人在整个框架上就感觉十分的松散。本文试图从文件之间是如何调用来给大家浅尝Caffe框架里隐含的逻辑与思想。

Caffe样例中mnist的文件之间逻辑分析的更多相关文章

  1. java 线程 原子类相关操作演示样例 thinking in java4 文件夹21.3.4

    java 线程  原子类相关操作演示样例 package org.rui.thread.volatiles; import java.util.Timer; import java.util.Time ...

  2. Relation Extraction中SVM分类样例unbalance data问题解决 -松弛变量与惩罚因子

    转载自:http://blog.csdn.net/yangliuy/article/details/8152390 1.问题描述 做关系抽取就是要从产品评论中抽取出描述产品特征项的target短语以及 ...

  3. 请编写一个方法,返回某集合的所有非空子集。 给定一个int数组A和数组的大小int n,请返回A的所有非空子集。保证A的元素个数小于等于20,且元素互异。各子集内部从大到小排序,子集之间字典逆序排序,见样例。

    题解:观察测试样例,会发现每个子集的选择规律与二进制((2^n) - 1)到 1 的顺序生成的规律是一致的,样例中n=3,2^n-1=7,用二进制表示为111,其中每一位的1表示数组中的三个数都选择. ...

  4. jbpm入门样例

    1.      jBPM的简介 jBPM是JBOSS下的一个开源java工作流项目,该项目提供eclipse插件,基于Hibernate实现数据持久化存储.    參考 http://www.jbos ...

  5. 浅谈hadoop中mapreduce的文件分发

    近期在做数据分析的时候.须要在mapreduce中调用c语言写的接口.此时就须要把动态链接库so文件分发到hadoop的各个节点上,原来想自己来做这个分发,大概过程就是把so文件放在hdfs上面,然后 ...

  6. WebGL自学教程——WebGL演示样例:開始

    最终開始WebGL的演示样例了,...... 開始 使用WebGL的步骤,非常easy: 1. 获得WebGL的渲染环境(也叫渲染上下文). 2. 发挥你的想象力,利用<WebGL參考手冊> ...

  7. 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface)

    ===================================================== 最简单的视音频播放演示样例系列文章列表: 最简单的视音频播放演示样例1:总述 最简单的视音频 ...

  8. HBase总结(十一)hbase Java API 介绍及使用演示样例

    几个相关类与HBase数据模型之间的相应关系 java类 HBase数据模型 HBaseAdmin 数据库(DataBase) HBaseConfiguration HTable 表(Table) H ...

  9. Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)

    Cocos2d-x 3.2 Lua演示样例 XMLHttpRequestTest(Http网络请求)     本篇博客介绍Cocos2d-x 3.2Lua演示样例中的XMLHttpRequestTes ...

  10. obj-c编程15[Cocoa实例03]:MVC以及归档化演示样例

    前面的博文里介绍了归档和解档,这里我们把它实际应用到一个简单的代码中去,将它作为一个多文档应用程序的打开和保存的背后支持.另外这里介绍一下MVC思想,这个在不论什么语言里都会有,它是一种设计思想,主要 ...

随机推荐

  1. supervisor 的安装与使用

    学习视频: https://www.bilibili.com/video/BV1Vi4y147Fm?from=search&seid=8875783979034550201 更多说明: htt ...

  2. 动态修改manifest.json

    点击查看代码 // h5开发环境 const h5Dev = { baseUrl: 'https://devh5.....' } // h5测试环境 const h5Test= { baseUrl: ...

  3. UE4 InstancedStaticMesh使用

    在绘制大批量近似模型时,Unity有GPU Instancing(https://www.cnblogs.com/hont/p/7143626.html),而UE中有 HISM和ISM(Instanc ...

  4. istio sidecar 工作方式

    istio 是什么 Istio 是一个开放源代码的服务网格,它为基于微服务的应用程序提供了一种统一的方式来连接.保护.监控和管理服务.Istio 主要解决的是在微服务架构中的服务间通信的复杂性问题,它 ...

  5. golang select 和外层的 for 搭配

    select语句通常与for循环搭配使用,但并不是必须的. 在某些情况下,select可能会直接放在一个独立的goroutine中,没有外层的for循环. 这通常发生在你知道只会有一次或有限次操作的情 ...

  6. pwn杂项之linux命令执行

    通常pwn题目,时常会考到对Linux命令的一些使用,比如当cat被禁用的时候,可以使用tac,或者别的命令代替 下面是buu上的应该题目,考察的就是对liunx命令的理解,以及对程序的分析. 题目地 ...

  7. jquery 给表格添加或删除一行

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  8. golang 怎么获取kubernetes deployments的状态?

    如果我们需要把k8s的信息展示为一个友好的web页面.那么deployment 的信息基本上是非常重要的(大部分的服务都是使用deployment部署). 从yaml 中我们能获取到很多关于deplo ...

  9. Flutter(五):Flutter 加入现有App的方案选择(Flutter_Boost)

    一.介绍 用 Flutter 一次性重写整个已有的应用是不切实际的.对于这些情况,Flutter 可以作为一个库或模块,集成进现有的应用当中.模块引入到您的 Android 或 iOS 应用(当前支持 ...

  10. 6.20考试总结(NOIP模拟9)[斐波那契·数颜色·分组]

    一旦你尝试过天空的味道,你就会永远向上仰望 T1 斐波那契 解题思路 题目传送门 \(70pts\)做法 这个做法比较暴力,考场上也是看到范围\(10^{12}\)后知道需要推式子,但是感觉自己太菜了 ...