深度学习框架的知识点

本文介绍了深度学习框架的作用,重点关注了PyTorch、TensorFlow和Caffe这三个流行的框架,阐述了它们在模型构建、训练、优化、并行计算以及在不同领域的应用。Caffe以其高效性和灵活性见长,而TensorFlow和PyTorch则以动态图和易用性著称。
摘要由CSDN通过智能技术生成

深度学习框架

什么是深度学习框架?

深度学习框架是一种用于构建、训练和部署深度神经网络模型的工具集合。它提供了丰富的函数和工具,使开发者能够方便地创建、调整和优化神经网络模型。深度学习采用的是 一种“端到端”的学习模式,从而在很大程度上减轻了研究人员的负担。但是随着神经网络的发展,模型的复杂度也在不断提升。即使是在一个最简单的卷积神经网络中也会包含卷积层、池化层、激活层、Flatten层、全连接层等。框架存在的意义就是 屏蔽底层的细节,使研究者可以专注于模型结构。
目前常用的深度学习框架有 PyTorch、Theano、TensorFlow、Keras、Caffe、MXNet、CNTK、PaddlePaddle。
目前较为流行的深度学习框架有 Caffe、TensorFlow以及PyTorch等。本章将依次对其进行介绍。
这些深度学习框架被应用于 计算机视觉、自然语言处理、语音识别、机器学习 等多个领域。
深度学习框架一般提供了以下功能:
模型定义:提供了一种方式来定义神经网络模型的结构,包括网络层的连接和参数设置。• 训练和优化 :提供了一种方式来训练和优化神经网络模型,包括定义损失函数、选择优化算 法和设置训练参数。
自动求导 :能够自动计算神经网络模型的梯度,以便进行反向传播算法进行训练。
并行计算 :支持在多个 GPU 或分布式环境上进行并行计算,以提升训练和推理的效率。
部署和推理 :能够将训练好的神经网络模型部署到实际应用中进行推理,包括在移动设备、边缘设备或云端进行推理。

2.1Caffe

       2.1.1 什么是Caffe?

         卷积神经网络框架(Convolutional Architecture for Fast Feature Embedding,Caffe)是一种常用的深度学习框架,主要应用在视频、图像处理等方面。Caffe是一个清晰、可读性高、快速的深度学习框架。Caffe的作者是贾扬清,其为加州大学伯克利分校的博士,现就职于Facebook公司。
Caffe 是一个主流的工业级深度学习工具,精于图像处理。它有很多扩展,但是由于一些遗留的架构问题,它不够灵活,且对递归网络和语言建模的支持很差。对于基于层的网络结构 Caffe 扩展性不好;而用户如果想要增加层,则需要自己实现前向传播、反向传播以及参数更新。

2.1.2Caffe的特点

Caffe是一个兼具效率、灵活性和扩展性的深度学习框架。其特点可以总结如下:

1. **高效性**:Caffe使用C++实现,并优化了GPU的使用,这使得它能够处理大规模数据集,并且训练速度非常快。
2. **灵活性**:Caffe允许用户自定义网络结构和参数,适用于不同的任务需求,提供了广泛的深度学习算法工具包和参考模型。
3. **可扩展性**:Caffe可以通过添加新的层和功能进行扩展,适应不断发展的深度学习领域的需求。
4. **多后端支持**
:Caffe不仅支持CUDA,还支持OpenCL等多种后端,使得它可以在各种设备上运行并根据需要进行优化。
5. **易用性**:Caffe提供了大量的文档和教程,帮助用户快速上手,并且解决使用过程中的问题。
6. **多接口支持**:虽然Caffe的核心是用C++编写的,但它提供了Python和MATLAB的接口,方便不同背景的开发者使用。
7. **广泛的应用范围**:Caffe可以应用于计算机视觉、自然语言处理、语音识别等多个领域,例如图像分类、目标检测、图像分割、文本分类等任务。
8. **高速运算能力**:Caffe利用GPU进行高速运算,据报道,在K40或Titan GPU上每天可处理4千万张图片,每张图片处理时间平均为2.5ms。

综上所述,Caffe是一个性能强大且应用广泛的深度学习框架,尤其适合于需要处理大规模图像或视频数据的场景。同时,它的灵活性和可扩展性使其成为研究人员和开发人员的理想选择,无论是在学术研究还是工业应用中都表现出色。

2.1.3caffe的概述

Caffe 是一种对新手非常友好的深度学习框架,它的相应优化都是以文本形式而非代码形式给出。

2.2TensorFlow

2.2.1什么是TensorFlow?

TensorFlow是一个采用数据流图(data flow graph)进行数值计算的开源软件库。节点(node)在数据流图中表示数学操作,线(edge)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算。TensorFlow 由 Google大脑小组(隶属于Google 机器智能研究机构)的研究员和工程师们开发,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。

2.2.2TensorFlow的概述

TensorFlow中的Flow,也就是,是其完成运算的基本方式。流是指一个计算图或简单的一个图,图不能形成环路,图中的每个节点代表一个操作,如加法、减法等。每个操作都会导致新的张量形成。
图 2.5展示了一个简单的计算图,所对应的表达式为:e=(a+b)*(b+1)。计算图具有以下属性。

图片
2.3PyTorch

2.3.1PyTorch的概述

       PyTorch具有先进设计理念的框架,历史可追溯到2002年就诞生于纽约大学的TorchTorch使用了一种不是很大众的语言Lua作为接口。Lua简洁高效,但由于其过于小众,以至于很多人听说要掌握Torch必须新学一门语言就望而却步,但Lua其实是一门比Python还简单的语言

考虑到Python在计算科学领域的领先地位,以及其生态完整性和接口易用性,几乎任何框架都不可避免地要提供Python接口。终于,在2017年,Torch的幕后团队推出了PyTorch。

PyTorch不是简单地封装LuaTorch提供Python接口,而是对Tensor之上的所有模块进行了重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架

PyTorch特点是拥有生态完整性和接口易用性,使之成为当下最流行的动态框架之一。

2.3.2PyTorch的特点

1.PyTorch 既可以看作为加入了GPU 支持的numpyTensorFlow 与Caffe 都是命令式的编程语言,而且是静态的,即首先必须构建一个神经网络,然后一次又一次使用同样的结构;如果想要改变网络的结构,就必须从头开始。但是PyTorch通过一种反向自动求导的技术,可以让用户零延迟地任意改变神经网络的行为。

2.PyTorch 的设计思路是线性、直观且易于使用的,当用户执行一行代码时,它会忠实地执行,所以当用户的代码出现Bug 的时候,可以通过这些信息轻松快捷地找到出错的代码,不会让用户在Debug 的时候因为错误的指向或者异步和不透明的引擎浪费太多的时间。

3.PyTorch 的代码相对于TensorFlow 而言,更加简洁直观,同时对于TensorFlow高度工业化的底层代码,PyTorch 的源代码就要友好得多,更容易看懂。深入API,理解PyTorch 底层肯定是一件令人高兴的事。

3.1模型评估与模型参数选择


之所以不能把训练误差1作为模型参数选择的标准,是因为训练集可能存在以下问题:①训练集样本太少,缺乏代表性;②训练集中本身存在错误的样本,即噪声。如果片面地追求训练误差的最小化,就会导致模型参数复杂度增加,使得模型过拟合(Overfitting ),如图 3.1所示。

 为了选择效果最佳的模型,防止过拟合的问题,通常可以采取的方法有:

1)使用验证集调参

(2)对损失函数进行正则化

(3)训练集增加更多数据

(4)重新清洗数据

(5)早停


3.1.1验证


模型不能过拟合于训练集,否则将不能在测试集上得到最优结果;但是否能直接以测试集上的表现来选择模型参数呢?因为这样的模型参数将会是针对某个特定测试集的,得出来的评价标准将会失去其公平性,失去了与其他同类或不同类模型相比较的意义。
因此参数的选择(调参)必须在一个独立于训练集和测试集的数据集上进行,这样用于模型调参的数据集被称为开发集或验证集。
然而很多时候我们能得到的数据量非常有限。这个时候我们可以不显式地使用验证集,而是重复使用训练集和测试集,这种方法称为交叉验证。常用的交叉验证方法如下。
(1)简单交叉验证。在训练集上使用不同的超参数训练,使用测试集选出最佳的一组超参数设置。
(2)K重交叉验证(K-fold cross validation)。将数据集划分成K等份,每次使用其中一份作为测试集,剩余的作为训练集;如此进行K次划分之后,选择最佳的模型。

3.1.2正则化

为了避免过拟合,需要选择参数复杂度较小的模型。这是因为如 I果有两个效果相同的模型,而它们的参数复杂度不相同,那么冗余的复杂度一定是过拟合导致的的。为了选择复杂度较小的模型,一种策略是在优化目标中加入正则化项,以惩罚冗余的复杂厂度:
min L(y,j;θ)+λ·J(θ)
其中0为模型参数,L(y,j;θ)为原来的损失函数,λ用于调整正则化项的权重,J(0)为正则化项。正则化项通常为0的某阶向量范数。
 

3.2监督学习与非监督学习

3.2.1无监督学习

在无监督学习中,数据集{x^(i)}_i=1^N中只有模型的输入,而并不提供正确的输出y^(i)作为监督信号数据中不含有“目标”的机器学习问题通常被为无监督学习(unsupervised learning)。
非监督学习通常用于这样的分类问题:给定一些样本的特征值,而不给出它们正确的分类,也不给出所有可能的类别;而是通过学习确定这些样本可以分为哪些类别、它们各自都属于哪 --类。这一类问题称为聚类。
非监督学习得到的模型的效果应该使用何种指标来衡量呢?由于没有期望输出y,我们采取一些其他办法来度量其模型效果。
(1)直观检测,这是一种非量化的方法。例如对文本的主题进行聚类,我们可以在直观上判断属于同一个类的文本是否具有某个共同的主题,这样的分类是否有明显的语义上的共同点。由于这种评价非常主观,通常不采用。
(2)基于任务的评价。如果聚类得到的模型被用于某个特定的任务,我们可以维持该任务中其他的设定不变,而使用不同的聚类模型,通过某种指标度量该任务的最终结果来间接判断聚类模型的优劣。
(3)人工标注测试集。有时候采用非监督学习的原因是人工标注成本过高,导致标注数据缺乏,只能使用无标注数据来训练。在这种情况下,可以人工标注少量的数据作为测试集,用于建立量化的评价指标。

3.2.2监督学习

在监督学习中,我们根据训练集{〈x^(i),y^(i)〉}_i=1^N中的观测样本点来优化模型f(⋅),使得给定测试样例x′作为模型输入,其输出y ̂尽可能接近正确输出y′。 y ̂= f(x)

简单线性回归 自变量 x 和因变量 y之间存在一条线性关系:

多元线性回归 假设自变量 和因变量 y之间存在一条线性关系,即:

准确率(Accuracy):对于测试集中D个样本,有k个被正确分类,D-k个被错误分类,则准确率为: Accuracy=分类正确的样本/样本总数= k/D= (TP+TN)/(TP+TN+FP+FN)

精确率(查准率)- Precision:所有被预测为正样本中实际为正样本的概率 Precision=预测为正样本实际也为样本/预测为正样本= TP/TP+FP

召回率(查全率)- Recall:实际为正的样本中被预测为正样本的概率 Recall=预测为正样本实际也为样本/实际为正样本= TP/TP+FN

F-度量则是在召回率与精确率之间去调和平均数;有时候在实际问题上,若我们更加看重其中某一个度量,还可以给它加上一个权值α,称为F_α-度量: F_α=(1+α^2)RP/R+α^2P 特殊地,当α=1时: F_1=2RP/R+P F1分数(F1-score)是分类问题的一个衡量指标。

那么预测只可能出现4种状况:
(1)将正类样本预测为正类(True Positive,TP);

(2)将负类样本预测为正类(False Positive,FP);

(3)将正类样本预测为负类(False Negative, FN);

(4)将负类样本预测为负类(True Negative, TN)。
 


 


 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值