深度学习框架
什么是深度学习框架?
深度学习框架一般提供了以下功能:
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年就诞生于纽约大学的Torch。Torch使用了一种不是很大众的语言Lua作为接口。Lua简洁高效,但由于其过于小众,以至于很多人听说要掌握Torch必须新学一门语言就望而却步,但Lua其实是一门比Python还简单的语言
•考虑到Python在计算科学领域的领先地位,以及其生态完整性和接口易用性,几乎任何框架都不可避免地要提供Python接口。终于,在2017年,Torch的幕后团队推出了PyTorch。
•PyTorch不是简单地封装Lua,Torch提供Python接口,而是对Tensor之上的所有模块进行了重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架。
•PyTorch特点是拥有生态完整性和接口易用性,使之成为当下最流行的动态框架之一。
2.3.2PyTorch的特点
1.PyTorch 既可以看作为加入了GPU 支持的numpy。TensorFlow 与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)。