深度学习小结
文章目录
Keras简介
TensorFlow、Keras和Pytorch是目前深度学习的主要框架,也是入门深度学习必须掌握的三大框架
- TensorFlow、Keras和Pytorch是目前深度学习的主要框架,也是入门深度学习必须掌握的三大框架
- Keras是一款用Python编写的高级神经网络API,由Francois Chollet发明,它能够以TensorFlow,CNTK,或者Theano作为后端运行。Keras的开发重点十支持快速的实验。因此能够以最小的时延把你的想法转换为实验结果,所以是一个很流行的机器学习和深度学习工具
-Keras和PyTorch的对比
Keras:更简练,更简单的 API
PyTorch:更灵活,鼓励用户更深入地理解深度学习概念
Keras 和 PyTorch 都是深度学习框架初学者非常棒的选择。如果你是数学家、研究员或者想要理解模型的本质,那么可以考虑选择 PyTorch。在需要更先进的定制化和 debug 时(例如用 YOLOv3 做目标检测或者带有注意力的 LSTM),或者当我们需要优化数组表达式而不是神经网络时(例如矩阵分解或者 word2vec 算法),PyTorch 真的很棒。如果你想要一个即插即用的框架,Keras 无疑是更简单的选择:快速构建、训练、评估模型,不需要在数学实现上花费太多的时间。深度学习的核心概念知识是可转移的。一旦你掌握了一个环境中的基础知识,你就能学以致用,掌握新的深度学习库。我们鼓励你在 Keras 和 PyTorch 中都尝试下简单的深度学习模型
神经网络
- 神经网络由什么组成
一个典型的神经网络由输入单元(下图红色),隐藏单元(下图蓝色)和输出单元(下图黄色)组成。输入单元所在的层为输入层,隐藏单元所在的层为隐藏层,输出单元所在的层为输出层。所有单元都和两边层里的单元连接。输入信息会首先进入左侧的输入层,然后激发中间的隐藏层,最后从右侧输出层输出结果。神经网络会通过学习渐渐调整每两个单元(神经元)连接的力度(权重)
-
输入神经网络的本质
它们是二进制数字:他们会开启或关闭神经网络中的单元 -
神经网络的如何学习
反向传播
它由正向传播和反向传播过程组成。在正向传播过程中,输入信息通过输入层经隐含层,逐层处理并传向输出层。如果在输出层得不到期望的输出值,则取输出与期望的误差的平方和作为目标函数,转入反向传播,逐层求出目标函数对各神经元权值的偏导数,构成目标函数对权值向量的梯量,作为修改权值的依据,神经网络的学习在权重值修改过程中完成。误差达到所期望值时,神经网络学习结束。 -
神经网络实际中如何工作
输入神经网络的信息本质是二进制数字:它们会开启或关闭神经网络中的单元(神经元)
例如:有5个输入单元,可以用二进制档案(是/否)输入不同椅子的5个不同特征。比如问题是:- 它有椅背吗?
- 它有桌面吗?
- 它有软的坐垫吗?
- 你能长时间舒服地坐在上面吗?
- 你能在它上面放很多东西吗?
之后,一个椅子就会表示为是、否、是、是、否,用二进制表示为10110,那么一个桌子就可以表示为否、是、否、否、是,用二进制表示为01001.所以,在学习过程中,神经网络就是查看很多像10110和01001这样的二进制数字,学习哪些是椅子,哪些是桌子
三类神经网络
1、前馈神经网络
实际应用中神经网络最为常见的一种。其第一层为输入层,最后一层为输出层,中间为隐藏层。如果隐藏层有很多歌,我们就称之为“深度”神经网络。它们会进行一系列的转换运算,改变两个案例的相似之处。每一层神经元活动都是下面一层神经元活动的一个非线性函数。
2、循环网络(CNN)
循环网络表现在连接图上,包含一些定向循环,也就是说,有时你沿着箭头前进会回到开始的地方。CNN还有很多复杂的动态变化,这让他们很难训练。它们更接近人脑的神经网络
3、对称连接网络(Symmetrically Connected Networks)
这种网络和循环神经网络有些相似,但单元之间的连接是对称的(它们在两个方向上有相同的权重)。对称网络分析起来,比循环神经网络容易的多。它们的用途也有更多的限制,因为它们按照能量函数运行。没有隐藏单元的对称连接网络称为“Hopfield网络”,有隐藏单元的则称为“波尔兹曼机”
8种神经网络架构
1、 感知机
第一代神经网络感知机只是仅有一个神经元的简单计算模型
2、卷积神经网络(CNN)
卷积神经网络可以用于关于对象识别的所有工作。
3、循环神经网络(RNN)
非常强大:包含两个属性
- 分布式的隐含状态让它们能有效存储过去的大量信息
- 非线性动力能让它们以复杂的方式更新自身隐含状态
4、长短期记忆模型(LSTM)
解决了用循环神经网络实现长期记忆的问题。
5、 Hopfield神经网络
6、波尔兹曼机网络
波尔兹曼机是一种随机循环神经网络,它可以看作Hopfield网络的一种随机、生成对应网络。它是首批能学习内部表示以及能表示和解决困难的组合问题的神经网络之一。
7、 深度信念网络(DBN)
深度信念网络是一种随机变量组成的有向非循环图。用信念网络时,我们需要其中一些变量,解决两个问题:
1. 推断问题:
推断未观察到的变量的状态
2. 学习问题:
调整变量之间的交互状况,让神经网络更能生成训练数据
8、 深度自动编码器
它们很适合解决非线性降维问题。
CUDA和CUDNN
- 什么是CUDA?
CUDA(ComputeUnified DeviceArchitecture),是显卡厂商NVIDIA推出的运算平台。CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题 - 什么是CUDNN?
NVIDIA cuDNN是用于深度神经网络的GPU加速库。它强调性能、易用性和低内存开销。NVIDIA cuDNN可以集成到更高级别的机器学习框架中,如谷歌的Tensorflow、加州大学伯克利分校的流行caffe软件。简单的插入式设计可以让开发人员专注于设计和实现神经网络模型,而不是简单调整性能,同时还可以在GPU上实现高性能现代并行计算处。 - CUDA与CUDNN的关系
CUDA看作是一个工作台,上面配有很多工具,如锤子、螺丝刀等。cuDNN是基于CUDA的深度学习GPU加速库,有了它才能在GPU上完成深度学习的计算。它就相当于工作的工具,比如它就是个扳手。但是CUDA这个工作台买来的时候,并没有送扳手。想要在CUDA上运行深度神经网络,就要安装cuDNN,就像你想要拧个螺帽就要把扳手买回来。这样才能使GPU进行深度神经网络的工作,工作速度相较CPU快很多。 - CUDNN不会对CUDA造成影响
从官方安装指南可以看出,只要把cuDNN文件复制到CUDA的对应文件夹里就可以,即是所谓插入式设计,把cuDNN数据库添加CUDA里,cuDNN是CUDA的扩展计算库,不会对CUDA造成其他影响。