Caffe的初步接触,从0到1的尝试

【版权申明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权) 

Caffe的初步接触,从0到1的尝试

What is Caffe?
Convolutional Architecture For Feature Embedding(特征嵌入的卷积框架,即卷积神经网络框架)
开源深度学习框架
纯粹的C++/CUDA架构
支持命令行, Python接口, Matlab接口
可以在CPU和GPU之间无缝切换(支持CPU/GPU)

我刚接触的Caffe的时候,Caffe对我来说是一个全新的东西(本人是嵌入式Linux软件工程师),很没有底气,完全不了解因此走了不少弯路和概念上的混淆,在这里我提出来,希望对各位有所帮助,不对的地方希望各位指出:

  1. caffe不是什么高深的东西,我们要有这么一个基础的认识!!!它其实就是一个程序,这个程序可以将你丢给他的训练数据(也就是Caffe的输入)变成模型(也就是Caffe的输出结果),当然在这中间你需要调整一些参数以便获得你想要的结果,这个过程中你是完全不需要自己写代码参与的。
  2. 训练数据 很明了,就是图像数据,足够数量的图像数据,可以得到更好的模型。
  3. 模型 是输出的结果,我们玩caffe不就是为了它吗?得到之后,在我们后续的程序中我们会加载这个模型进行物体识别等操作,这是后面的事情了,我们的重点是,得到这个模型!!!
  4. 开源深度学习框架 ,为什么把它叫框架,因为它容易复用。你只需要准备好数据以及知道怎么调参数,你就可以在这个框架的基础上进行修改得到你想要的结果,这非常简单,一定要知道。
  5. 通过Caffe来完成相应的任务不需要自己编写代码, 只需要通过配置文件来指定网络.
Caffe下载地址:

caffe的官网, 里面有关于Caffe的介绍/使用/文档/例子: http://caffe.berkeleyvision.org

Linux版本的Caffe源码: https://github.com/BVLC/caffe

Windows版本的Caffe: https://github.com/Microsoft/caffe

Caffe对比其他框架的优缺点:
容易上手(对新手非常友好), 网络结构都是以配置文件形式定义, 不需要用代码设计网络;
训练速度快, 能够训练最新的模型和大规模的数据;
组件模块化, 可以方便地拓展到新的模型和学习任务上.
---------
TensorFlow的灵活性非常好, 这是Caffe比不了的.
Caffe的新版本 --> Caffe2:
2017年4月18日开幕的F8年度开发者大会上, Facebook发布的一款全新的开源深度学习框架;
一个轻量化和模块化的深度学习框架, 在强调轻便型的同时, 保持了可扩展性和计算性能;

Caffe2的官网: http://caffe2.ai
Caffe2的源码: https://github.com/caffe2/caffe2

相对于Caffe, Caffe2的独特特性:

  1. 支持分布式训练;
  2. 支持IOS系统、Android系统和树莓派上训练和部署模型;
  3. Caffe2框架已经应用在Facebook平台上;
  4. NVIDIA(英伟达)、Qualcomm(博通)、Intel(英特尔)、Amazon(亚马逊)和Microsoft(微软)等公司的云平台都以支持Caffe2.

Caffe VS Caffe2:

  1. 简化依赖, 按需配置, 完美地解决了依赖问题(新版)
  2. 采用了operator方式, 由更细粒度的operator组合而成;
  3. 对Caffe中的Blob进行扩展, 支持更多的类型, 这就让Binary Net和模型的量化压缩变得可行;
  4. Operator Functionality Comparison(操作功能比较):
    Caffe: [input] --> [InnerProductLayer [weight][bias]] --> [output]
    Caffe2: [input][weight][bias] --> [InnerProduct] --> [output]
Caffe中的基本概念:

Caffe模块包括四个部分:

  1. Blob: Caffe中数据的封装, 用于layer上流动;四维连续数组, 通常表示为(n, k/c, w, h), 是基础的数据结构: 可表示输入输出数据, 也可表示参数数据.
    - n: 一个批量样本的大小,即样本的个数;
    - k/c: 通道的数量;
    - w: 图像的宽度;
    - h: 图像的高度;
  2. Layer: 输入层、输出层、神经网络层的抽象;网络基本单元, 每一层类型定义了3种计算:
    - 初始化网络参数;
    - 前向传播;
    - 后向传播;
  3. Net: 神经网络结构, 将layer层叠关联起来;
    - 无回路的有向图;
    - 初始化函数:
    - - - 创建blobs和layers;
    - - - 调用layers的setup函数来初始化layers;
    - Forward和Backward
  4. Solver: 定义神经网络训练和测试参数.
    - 创建训练网络和测试网络;
    - 周期性地测试网络;
    - 调用前向和反向函数进行的迭代优化和参数更新;
    - solver每轮迭代都会通过前向函数计算输出和损失(loss),还用反向传播来计算梯度.
caffe model:
	用于保存和恢复网络参数, 后缀为.caffemodel
	solver保存和恢复运行状态, 后缀为.solverstate
Caffe源码目录结构解读:
	data:	用于存放下载的训练数据;
	docs:	帮助文档;
	example:一些代码样例;
	matlab:	Matlab接口文件;
	python:	Python接口文件;
	model:	一些配置好的模型参数;
	script:	一些文档和数据用到的脚本;
	tools:	保存的源码是用于生成二进制处理程序的, 也是我们直接使用命令行训练时候的工具.
	include:Caffe的头文件.hpp, 命名方式一般为网络名字开头.
	src:	Caffe的源文件.cpp和.cu
		src/caffe文件夹下:
			test:	用gtest测试caffe的代码;
			util:	数据转换时用到的一些代码;
			proto:	是一种数据存储格式, 帮助caffe提速, 注意: 我们在添加网络的时候, 需要在这个文件中添加相应的配置, 除此之外, 还需要添加相应的.hpp和.cpp文件到include和src中;
			layers:	定义并实现了网络的前向、反向等方法;
			solver:	定义并实现了一系列优化方法, 如SGD、Adam等.
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安河桥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值