python caffe框架_你真的了解深度学习框架Caffe吗?

Caffe是由伯克利大学的贾杨清等人开发的一个开源的深度学习框架,采用高效的C++语言实现,并内置有Python和MATLAB接口,以供开发人员使用Python或MATLAB来开发和部署以深度学习为核心算法的应用。Caffe适用于互联网级别的海量数据处理,包括语音,图片,视频等多媒体数据。Caffe的高速运算是通过GPU来实现的,在K40或者Titan GPU上每天可处理4千万张图片,相当于1张图片仅用2.5ms,速度非常快。

caffe框架

Caffe提供了一个用于训练、测试、微调和开发模型的完整工具包,而且它拥有完善文档的例子用于这些工作。同样的,它也是一个对于研究人员和其他开发者进入尖端机器学习的理想起点,这使得它在短时间内就能用于产业开发。Caffe的特性和优点主要有:模块性:Caffe本着尽可能模块化的原则,这样使新的数据格式,网络层和损失函数容易扩展。网络层和损失函数已定义,大量示例展示了这些部分是怎样组成一个识别系统用于不同情况工作的。表示和实现的分离:Caffe模型的定义已经用Protocl Buffer语言写成了配置文件。Caffe支持在任意有向非循环图形式的网络构建。根据实例化,Caffe保留网络需要的内存,并且从主机或者GPU底层的位置抽取内存。在CPU和GPU之间转换只需要调用一个函数。测试范围:每一个在Caffe中的单独模块都会进行测试,没有相应测试就不能有新代码加入进项目。这样就可以快速改进和重构代码库。Python和MATLAB结合:Caffe提供了Python和MATLAB相结合的目前研究代码的快速原型和接口。两种语言都用在了构造网络和分类输入中。预训练参考模型:Caffe提供了参考模型用于视觉工作,包括里程碑式的“Alex Net”、Image Net模型的变形和R-CNN探测模型。

目前,有许多主流的深度学习框架,每个框架都有其优点。下表给出Caffe和其他主流框架的对比。Caffe与其他深度学习开发工具相比,主要有以下两个区别:(1)Caffe完全用C++语言来实现,便于移植,并且无硬件和平台的限制,适用于商业开发和科学研究。(2)Caffe提供了许多训练好的模型,通过微调(Fine-Tuning)这些模型,在不用重写大量代码的情况下,就可以快速、高效的开发出新的应用,这也是当下软件应用开发的趋势。

深度学习框架对比

Caffe在不同的操作系统中搭建方法不同,Caffe官网给出了Caffe开发环境搭建的软硬件要求和搭建步骤。但是由于Caffe依赖于许多第三方的工具包,因此Caffe的搭建过程十分复杂,Caffe在64位ubuntu14.04操作系统上的搭建步骤,共六个步骤。

1.CUDA安装。随着硬件生产技术的发展,GPU的性能和功能都大幅度提升,在计算性能上已经超越了通用的CPU,如此强大的芯片如果只做为显卡就太浪费了。目前,大多数应用和设备都采用CPU和GPU协同工作的模式,充分利用GPU来进行高性能计算。CUDA(Compute Unified Device Architecture)是英伟达公司推出的运算平台,其提供了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎,通过CUDA驱动GPU来进行并行计算。

2.Open BLAS库安装。Open BLAS是一个基于Goto BLAS2 1.13 BSD版本优化的BLAS库,Caffe需要Open BLAS来提供简易的矩阵和向量运算操作。

3.Open CV开源视觉库安装。Open CV提供了图像数据操作、基本图像处理和目标识别等功能。

4.Anaconda Python安装。Anaconda Python是Python科学技术包的合集,其包含的科学计算工具包有:numpy,sicpy,matplotlib,spyder等,提供完全免费的企业级的大规模数据处理、预测分析和科学计算工具。

5.安装其他依赖项。Caffe还依赖其他工具包,包括leveldb、snappy、hdfs5和gflags等。

6.编译Caffe。官网下载Caffe工具包并解压,进入Caffe根目录,首先复制一份Makefile.config,并修改其参数。

编译Caffe

Caffe的核心模块有三个,分别是Blobs、Layers和Nets。Blobs用来进行数据存储、数据交互和处理,通过Blobs,统一制定了数据内存的接口。Layers是神经网络的核心,定义了许多层级结构,它将Blobs视为输入输出。Nets是一系列Layers的集合,并且这些层结构通过连接形成一个网图。下面进行详细介绍:

1.Blobs。Blobs本质是一个N维向量,用来存储数据信息,这些数据信息包括图片、深度网络进行前向传输时的数据和反向求梯度过程时的梯度数据等。对于图像数据来说,Blobs通常是一个4维向量,其格式为(Number,Channel,Height,Width),其中Channel表示图像的通道数,若图像是单通道的灰度图,则Channel=1;若是3通道的RGB图像,则Channel=3。Height和Width分别表示图像的高度和宽度。至于Number则表示图像批块(Batch),批处理可以使神经网络有更大的吞吐量。

2.Layers。Layers是神经网络的核心,Caffe设计实现了许多层结构,包括卷积、池化、损失等层结构,利用这些层结构可以实现绝大部分的神经网络模型。Layers将下层的数据输出作为输入,进而通过内部运算输出。Layers层的定义和使用一般需要三个步骤:(1)建立层,包括建立连接关系和初始化其中一些变量参数;(2)前向传输过程,给定输入并计算出相应的输出;(3)反向传播过程,进行反向梯度的计算,并把梯度保存在层结构中。

3.Nets。Nets是由层Layers组成的,定义了输入、输出、网络各层,并将各层连接成一个有向无环图(DAG),由此定义了一个网络。一个典型的网络应该有数据输入,并且以一个代价函数作为输出,针对不同的任务,例如分类和重构,应选择不同的代价函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值