深度学习框架,Caffe,TensorFlow(笔记)

一、什么是深度学习框架

        深度学习采用“端到端”的学习模式。随着神经网络的发展,模型的复杂度也不断提升。即使是在一个最简单的卷积网络神经中也会包含卷积层、池化层、激活层、Flatten层、全连接层等

1、意义

        屏蔽底层的细节,使研究者可以专注于模型结构。

2、功能

1、神经网络的定义和配置:框架提供了一组API,允许用户方便地定义神经网络的结构,如层数、激活函数类型、优化器选择等参数的配置。

2、训练和优化:内置的计算引擎支持前向传播反向传播算法,自动进行梯度计算参数更新,帮助用户完成模型的训练过程。

3、数据管理和预处理:提供数据加载、处理的工具,支持数据增强、批量处理等功能,以提高模型的鲁棒性和泛化能力。​​​​​​​(深度学习的鲁棒性指的是模型在面对输入数据中的噪声、异常点或对抗攻击时,仍能保持正确和稳定输出的能力。)

4、硬件加速和分布式计算:支持多GPU分布式系统上的并行计算,加快模型训练的速度,并提高计算效率。

5、模型的部署和推理:使训练好的模型能够在不同的硬件平台上运行,并进行实际的预测和推理任务。

二、Caffe

1、什么是Caffe

        卷积神经网络框架是一种常用的深度学习框架,主要应用在视频、图像处理等方面。

        Caffe是一个清晰、可读性高、快速的深度学习框架。

        Caffe是一个主流的工业级深度学习工具,精于图像处理(它不够灵活,且对递归网络和语言建模的支持很差。对于基于层的网络结构,Caffe扩展性不好;用户如果想增加层,则需要自己实现前向传播、反向传播以及参数更新。)

2、特点

1、Caffe的基本工作流程是设计建立在神经网络的一个简单假设,所有的计算都是以层的形式表示的。

如:

网络层所做的就是接收输入数据,然后输出计算结果。

卷积层就是输入一幅图像,然后和这一层的参数(filter)进行卷积,最终输出卷积结果。

2、每层需要两个函数计算,一个是forward从输入计算到输出;另一个的backward从上层给的gradient来计算相对于输入层gradient。

3、这两个函数实现之后,我们就可以把许多层连接成一个网络,这个网络输入数据(图像、语音或其他原始数据),然后计算需要的输出(比如识别的标签)。

4、训练的时候可以可以根据已有的标签计算loss和gradient,然后用gradient来更新网络中的参数。

5、Caffe是一个清晰而高效的深度学习框架。基于纯粹的C++/CUDA架构,支持命令行、Python和MATLAB接口,可以在CPU和GPU之间直接无缝切换。

6、模型与优化都通过配置文件来设置,无须代码。

7、允许对数据格式、网络层和损失函数进行扩展。

8、Caffe模型的定义是用Protocol Buffer(协议缓冲区)语言以任意有向无环图的形式写进配置文件的。

9、Caffe会根据网络需要正确占用内存,通过一个函数调用实现CPU和GPU之间的切换。

10、Caffe中的每一个单一的模块都对应一个测试,使得测试的覆盖非常方便,同时提供python和MATLAB接口,用这两种语言进行调节都是可行的。

3、Caffe概述

1、Caffe的相应优化都是以文本形式而非代码形式给出。Caffe中的网络都是有向无环图的集合,可以直接定义。 Caffe网络的定义如下:

name:"dummy-net"

layers{name:"data"  ···}

layers{name:"conv"  ···}

layers{name:"pool"  ···}

layers{name:"loss"  ···}

2、数据及其导数以blob的形式在层间流动,Caffe层的定义由两部分组成:层属性与层参数

如下所示:

name:"conv1"

type:CONVOLUTION

bottom:"data"

top:"conv1"

convolution_param{

        num_output:20

        kernel_size:5

        stride:1

        weight_filler{

                type:"xavier"

        }

}

前4行是层属性,定义了层名称、层类型以及层连接结构;

后半部分是各种层参数

blob是存储数据的4维数组,例如:

数据表示为Number*Channel*Height*Width;

卷积权重表示为Output*Input*Height*Width;

卷积偏置表示为Output*1*1*1。

三、TensorFlow 

1、什么是TensorFlow、

TensorFlow是一个采用数据流图进行数值计算的开源软件库。节点(node)在数据流图中表示数学操作线(edge)则表示在节点间相互联系的多维数据数组,即张量(tensor)。灵活的架构让你可以在多种平台上展开计算。

TensorFlow由Google大脑小组(隶属于Google机器智能研究机构)的研究员和工程师们开发,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其可以广泛用于其他计算领域。

2、数据流图

数据流图用“节点”和“线”的有向图来描述数学计算。

“节点”一般用来表示施加的数学操作,但也可以表示数据输入(feed in)的起点/输出(push out)的终点。

“线”表示“节点”之间的输入/输出关系。

“线”可以运输“size可动态调整”的多维数据数组,即“张量”。

张量从图中“流过"的直观图像是这个工具取名为“TensorFlow”的原因。

一旦输入端的所有张量准备好,节点将被分配到各种计算设备,完成异步与并行的运算。

3、特点

1、只要用户将计算表示为一个数据流图就可以使用TensorFlow。

2、TensorFlow提供有用的工具来帮助用户组装“子图”,用户也可以自己在TensorFlow基础上写自己的“上层库”。

3、TensorFlow的可扩展性相当强,如果用户找不到想要的底层数据操作,也可以自己写一些C++代码来丰富底层的操作。

4、TensorFlow可在CPU和GPU上运行,如:可以运行在台式计算机、服务器、手机移动设备等。

5、TensorFlow支持自动在多个CPU上规模化运算训练模型,以及迁移到后台。

6、TensorFlow有一个合理的C++使用界面,也有一个易用的python使用界面来构建和执行你的图。

4、概述

TensorFlow中的Flow,也就是流,是其完成运算的基本方式。

是指一个计算图或简单的一个图,图不能形成环路,图中的每个节点代表一个操作。如:加法、减法等。每个操作都会导致新的张量形成。

5、简单的计算图

表达式:e=(a+b)*(b+1)

计算图:

①:叶子顶点或起始顶点始终是张量,即操作永远不会发生在图的开头,由此可以推断,图中的每个操作都应该接收一个张量并产生一个新的张量。

②:张量不能作为非叶子节点出现,意味着它们应始终作为输入提供给操作/节点。

③:计算图总是以层次顺序表达复杂的操作,通过a+b表示为c,将b+1表示为d,可以分层次组织上述表达式。 因此,可以将e写为:e=(c)*(d)

④:计算图的并行,即同级节点的操作彼此独立,这是计算图的重要属性之一。在同一级中的节点,例如c和d,彼此独立。意味着没有必要在计算d之前计算c,因此它们可以并行执行。

同级的节点是独立的。意味着在c被计算之前不需空闲,可以在计算c的同时并行计算d。

TensorFlow允许用户使用并行计算设备更快地执行操作。计算的节点或操作自动调度进行并行计算。这一切的发生在内部,如上图,可以在CPU上调度操作c,在GPU上调度操作d。

6、两种分布式执行过程

1、两种分布式

(a)是单个系统分布式执行,其中单个TensorFlow会话创建单个worker,并且该worker负责在各设备上调度任务。

(b)所示有多个worker,它们可以在同一台机器上或不同机器上,每个worker都在自己的上下文中运行。worker processl运行在独立的机器上,并调度所有可用设备进行计算。

2、计算子图

计算子图是主图的一部分,其本身就是计算图。

例:图2.5可以获得许多子图,其中之一如图2.7

是主图的一部分,可以表示一个子表达式,因为c是e的子表达式。

下图解释了子图的并行执行:

两个矩阵(MatMul)乘法运算,它们都处于同一级别且彼此独立

由于独立性,节点安排在不同的设备gpu_0和gpu_1上。

TensorFlow将其所有操作分配到由worker管理的不同设备上。更常见的是worker之间交换张量形式的数据,如:e=(c)*(d)的计算图中,一旦计算出c,就需要将其传递给e,因此张量在节点间前向流动。worker间信息传递如下图:

  • 24
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值