赞
踩
目录
3、通过PyTorch知识了解Caffe、TensorFlow
这是我发的第二章博客了,这是来自于我的python深度学习的第二章以及第三章的知识点总结,部分知识点是基于上一篇博客而增加的,希望我的这篇博客可以帮到大家。
注:有许多内容来自于课件PPT及网络摘抄。
1.了解什么是深度学习框架
2.可阐述PyTorch的特点和概述
3.学习模型评估与模型参数选择
4.认识部分验证方法
5.学习正则化
6.复习监督学习和无监督学习并在此基础上叠加知识
在开始深度学习项目之前,选择一个合适的框架是非常重要的,因为选择一个合适的框架能起到事半功倍的作用。在深度学习初始阶段,每个深度学习研究者都需要写大量的重复代码。为了提高工作效率,这些研究者就将这些代码写成了一个框架放到网上让所有研究者一起使用。接着,网上就出现了不同的框架。随着时间的推移,最为好用的几个框架被大量的人使用从而流行了起来。 全世界最为流行的深度学习框架有Tensorflow、Caffe、Theano、MXNet、Torch和PyTorch。
深度学习框架是一种用于构建、训练和部署深度神经网络模型的工具集合。它提供了丰富的函数和工具,使开发者能够方便地创建、调整和优化神经网络模型。目前常用的深度学习框架有PyTorch、Theano、TensorFlow、Keras、Caffe、MXNet、CNTK、PaddlePaddle, 这些深度学习框架被应用于计算机视觉、自然语言处理、语音识别、机器学习等多个领域。深度学习采用 “端到端”的学习模式,在很大程度上减轻负担。但随着神经网络的发展,模型的复杂度也在不断提升。框架存在的意义就是屏蔽底层的细节,使研究者可以专注于模型结构。(搭积木)
深度学习框架的出现降低了入门的门槛,你不需要从复杂的神经网络开始编代码,你可以根据需要选择已有的模型,通过训练得到模型参数,你也可以在已有模型的基础上增加自己的layer,或者是在顶端选择自己需要的分类器和优化算法(比如常用的梯度下降法)。当然也正因如此,没有什么框架是完美的,就像一套积木里可能没有你需要的那一种积木,所以不同的框架适用的领域不完全一致。 总的来说深度学习框架提供了一些列的深度学习的组件(对于通用的算法,里面会有实现),当需要使用新的算法的时候就需要用户自己去定义,然后调用深度学习框架的函数接口使用用户自定义的新算法。
深度学习框架一般提供了以下功能:
模型定义:提供了一种方式来定义神经网络模型的结构,包括网络层的连接和参数设置。
训练和优化:提供了一种方式来训练和优化神经网络模型,包括定义损失函数、选择优化算法和设置训练参数。
自动求导:能够自动计算神经网络模型的梯度,以便进行反向传播算法进行训练。
并行计算:支持在多个GPU或分布式环境上进行并行计算,以提升训练和推理的效率。
部署和推理:能够将训练好的神经网络模型部署到实际应用中进行推理,包括在移动设备、边缘设备或云端进行推理。
Pytorch是torch的python版本,是由Facebook开源的神经网络框架,专门针对 GPU 加速的深度神经网络(DNN)编程, PyTorch具有先进设计理念的框架,其历史可追溯到2002年就诞生于纽约大学的Torch。Torch使用了一种不是很大众的语言Lua作为接口。Lua简洁高效,但由于其过于小众,以至于很多人听说要掌握Torch必须新学一门语言就望而却步,但Lua其实是一门比Python还简单的语言。在2017年,Torch的幕后团队推出了PyTorch。 PyTorch不是简单地封装Lua,Torch提供Python接口,而是对Tensor之上的所有模块进行了重构,并新增了最先进的自动求导系统,成为当下最流行的动态图框架。
PyTorch特点是拥有生态完整性和接口易用性,使之成为当下最流行的动态框架之一;PyTorch通过一种反向自动求导的技术,可以让用户零延迟地任意改变神经网络的行为;PyTorch 的设计思路是线性、直观且易于使用的;PyTorch 的代码相对于TensorFlow 而言,更加简洁直观,同时对于TensorFlow高度工业化的底层代码,PyTorch 的源代码就要友好得多,更容易看懂。
Caffe:
卷积神经网络框架(Convolutional Architecture for Fast Feature Embedding,Caffe)是一种
常用的深度学习框架,主要应用在视频、图像处理等方面。Caffe是一个清晰、可读性高、快速
的深度学习框架。Caffe 的作者是贾扬清,其为加州大学伯克利分校的博士,现就职于Facebook
公司。Caffe 是一个主流的工业级深度学习工具,精于图像处理。它有很多扩展,但是由于一些遗
留的架构问题,它不够灵活,且对递归网络和语言建模的支持很差。对于基于层的网络结构,
Caffe 扩展性不好;而用户如果想要增加层,则需要自己实现前向传播、反向传播以及参数更新。
TensorFlow:
TensorFlow 是一个采用数据流图(data flow graph ) 进行数值计算的开源软件库。节点(node)在数据流图中表示数学操作,线( edge)则表示在节点间相互联系的多维数据数组,即张量(tensor)。它灵活的架构让你可以在多种平台上展开计算。TensorFlow 由Google 大脑小组(隶属于 Google 机器智能研究机构)的研究员和工程师们开发,用于机器学习和深度神经网络方面的研究,但这个系统的通用性使其也可广泛用于其他计算领域。
若对于给定的输入x,若某个模型的输出y ̂=f(x)偏离真实目标值y,那么就说明模型存在误差; y ̂偏离y的程度可以用关于y ̂和y某个函数L(y,y ̂)来表示,作为误差的度量标准:这样的函数L(y,y ̂)称为损失函数。
在某种损失函数度量下,训练集上的平均误差被称为训练误差,测试集上的误差称为泛化误差。 由于我们训练得到一个模型最终的目的是为了在未知的数据上得到尽可能准确的结果,因此泛化误差是衡量一个模型泛化能力的重要标准。泛化误差越小越好,经验误差不一定越小越好,可能导致过拟合。
训练集:训练集的主要作用是用于构建模型,即通过训练集中的数据来训练机器学习算法,使其学习到数据的特征和规律。它类似于学生课后的练习题,用于日常的知识巩固。
验证集:验证集主要用于模型的调整和优化。在模型训练过程中,可以使用验证集来评估模型的性能,并根据评估结果对模型进行调整,以提高模型的泛化能力。它相当于周考,用来纠正和强化学到的知识。
测试集:测试集用于最终评估模型的性能。在模型完成训练和验证后,使用测试集来测试模型的最终效果,以确保模型能够在未见过的数据上表现良好。测试集相当于期末考试,用来最终评估学习效果。
模型不能过拟合于训练集,否则将不能在测试集上得到最优结果;但是否能直接以测试集上的表现来选择模型参数呢? 答案是否定的。因为这样的模型参数将会是针对某个特定测试集的,得出来的评价标准将会失去其公平性,失去了与其他同类或不同类模型相比较的意义。因此参数的选择(即调参)必须在一个独立于训练集和测试集的数据集上进行,这样的用于模型调参的数据集被称为开发集或验证集。然而很多时候我们能得到的数据量非常有限。这个时候我们可以不显式地使用验证集,而是重复使用训练集和测试集,这种方法称为交叉验证。 常用的交叉验证方法有: 简单交叉验证、 K-重交叉验证。
交叉验证:
留出法(Holdout cross validation): 按照固定比例将数据集静态的划分为训练集、验证集、测试集。
自组法(bootstrapping) 适合于样本数目较少,有放回的取法。
k 折交叉验证(k-fold cross validation):k 一般取 10 将数据集分为训练集和测试集,将测试集放在一边 将训练集分为 k 份 每次使用 k 份中的 1 份作为验证集,其他全部作为训练集。 通过 k 次训练后,我们得到了 k 个不同的模型。 评估 k 个模型的效果,从中挑选效果最好的超参数 使用最优的超参数,然后将 k 份数据全部作为训练集重新训练模型,得到最终模型。
正则化是一种常用的机器学习技术,用于防止模型过拟合。在训练机器学习模型时,我们通常会使用大量的特征来拟合训练数据,但这可能导致模型过于复杂,无法很好地泛化到新的数据上。正则化通过在损失函数中引入一个正则化项,来限制模型的复杂度,从而提高模型的泛化能力。常见的正则化方法有L1正则化和L2正则化。L1正则化通过在损失函数中添加模型参数的绝对值之和,使得部分参数变为0,从而实现特征选择和稀疏性。L2正则化通过在损失函数中添加模型参数的平方和,使得参数值尽可能小,从而减小模型的复杂度。
正则化的优点包括:
防止过拟合:通过限制模型的复杂度,可以减少模型对训练数据的过度拟合,提高模型的泛化能力。
特征选择:L1正则化可以将部分特征的权重置为0,从而实现特征选择,减少不重要的特征对模型的影响。
改善模型稳定性:正则化可以减小模型参数的值,使得模型对输入数据的小变化更加稳定。
当模型无法很好地拟合训练数据,并且在训练集和测试集上都表现不佳时,我们称之为欠拟合。这意味着模型无法捕捉到数据中的关键特征和模式,导致预测结果不准确。
解决欠拟合的方法包括:
寻找最优的权重初始化方案;
增加网络层数、epoch;
使用适当的激活函数、优化器和学习率;
减少正则化参数;
增加特征。
当模型在训练集上表现良好,但在测试集上表现较差时,我们称之为过拟合。过拟合发生时,模型过度学习了训练数据中的噪声和细节,导致对新数据的泛化能力较差。
解决过拟合的方法包括:
移除特征,降低模型的复杂度;
减少神经元的个数,减少隐藏层的层数 ;
训练集增加更多的数据 ;
重新清洗数据 ;
数据增强 ;
正则化;
早停。
监督学习是通过带有标签或对应结果的样本训练得到一个最优模型,再利用这个模型将所有输入映射为相应输出,以实现分类。在现实世界中,监督学习可用于风险评估、图像分类、欺诈检测、垃圾邮件过滤等。
回归问题在监督学习中扮演着至关重要的角色,它涉及到预测或估计一个连续变量的值。且回归问题包含了简单线性回归和多元线性回归。
回归问题的应用场景非常广泛,包括但不限于:
金融领域:如信用评分模型,用于预测个人的信用分数。
房地产行业:根据房屋的特征(如面积、位置等)预测其市场价值。
气象预报:基于历史数据预测未来的天气情况。
股票市场分析:预测股票的未来价格。
监督学习中的分类问题是用于将数据分门别类的任务,通常处理的是离散型的预测。在监督学习中,分类问题与回归问题并列,是该领域内的另一大主要任务。不同于回归问题预测连续数值的目标,分类问题旨在将数据分配到预定义的类别中。
无监督学习是在样本的标签未知的情况下,根据样本之间的相似性对样本集进行聚类,使类内差距最小化,学习出分类器。在无监督学习中,数据集中只有模型的输入,而并不提供正确的输出y^(i)作为监督信号,数据中不含有“目标”的机器学习问题通常被为无监督学习。
把数据集分成一个个的簇cluster(也可以理解为一组一组的形式)
主成分分析PCA是一种常用的数据分析方法。PCA通过线性变换将原始数据变换为一组各维度线性无关的表示,可用于提取数据的主要特征分量,常用于高维数据的降维。
如果想通过物体a去推断物体b,就是将物体a放在这里会增加物体b出现概率的多少,想要找到这样一个确定的促进关系即因果关系 往往会被confounder干扰到,而这个confounder就是物体a与b之间的共因。
生成对抗网络(GANs)是一种强大的无监督学习方法,以其出色的生成能力和广泛的应用领域而备受关注。GANs通过让一个生成器网络与一个判别器网络相互博弈,从而实现了高度逼真的数据生成。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。