Python神经网络入门与实战(文末赠书)

2020 年 12 月 26 日 AINLP


周末推荐一本北京大学出版社的《Python神经网络入门与实战》,感兴趣的同学可以参与文末赠书活动。以下是本书简介和书中关于“卷积神经网络”的介绍。



本书简介


本书从神经网络的基础知识讲起,逐步深入到Python进阶实战,通过对各种实用的第三方库进行详细讲解与实战运用,让读者不但能够更加深入地了解神经网络,而且能够简单高效地搭建自己的神经网络,即使没有专业背景知识也能轻松入门神经网络。

  

本书分为 11章,涵盖的主要内容有神经网络概述,神经网络基础知识,计算机程序的特点,神经网络优化算法,搭 建Python环境,Python基础知识,深度学习框架PyTorch基础知识,NumPy简介与使用,OpenCV简介与使用,OS遍历文件夹,Python中Matplotlib可视化绘图,Lenet-5、AlexNet、VGG16网络模型,回归问题和分类问题,猫狗识别程序开发,验证码识别程序开发,过拟合问题与解决方法,梯度消失与爆炸,加速神经网络训练的方法,人工智能的未来发展趋势等。
  

本书内容通俗易懂,案例丰富,实用性强,特别适合神经网络的零基础入门读者阅读,也适合 Python 程序员、PyTorch爱好者等阅读。



卷积神经网


卷积神经网络(Convolutional Neural Networks,CNN)是一种基于卷积操作的多层神经网络,是深度学习的代表算法之一。它不仅用于计算机视觉领域,甚至在语音识别等其它与图像无关的领域也被广泛应用,随着深度学习近年来的火爆,卷积神经网络的潜力正在被不断挖掘,不断呈现出新的令人惊奇的应用。


1988年,Wei Zhang提出了第一个二维卷积神经网络:平移不变人工神经网络(SIANN),并将其应用于检测医学影像。Yann LeCun在1989年同样构建了应用于计算机视觉问题的卷积神经网络,即LeNet的最初版本。LeNet包含两个卷积层,2个全连接层,共计6万个学习参数,且在结构上与现代的卷积神经网络十分接近。LeCun 对权重进行随机初始化后使用了随机梯度下降(Stochastic Gradient Descent, SGD)进行学习,这一策略被其后的深度学习研究所保留。此外,LeCun 在论述其网络结构时首次使用了“卷积”一词,“卷积神经网络”这一名称也是由此而来。在LeNet的基础上,1998年Yann LeCun及其合作者构建了更加完备的卷积神经网络LeNet-5并在手写数字的识别问题中取得成功。LeNet-5沿用了LeCun 的学习策略并在原有设计中加入了池化层对输入特征进行筛选。LeNet-5及其后产生的变体定义了现代卷积神经网络的基本结构,其构筑中交替出现的卷积层-池化层被认为能够提取输入图像的平移不变特征。这种卷积层加池化层的基本结构也成为现代深度学习领域中,构建卷积神经网络的主流结构。


卷积核(Convolution Kernel)是一种在进行图像处理时,给定输入图像,对输入图像中的某一个小的区域进行某种加权求和运算的核函数。在图像处理中,卷积核也被用作锐化和提取边缘。


我们在定义一个卷积核的时候,主要需要关注两个方面,一个是卷积核的尺寸,另一个则是卷积核的参数,如图2.19所示,这是一个拉普拉斯算子,也可以说是一个的卷积核,它的作用是提取边缘,如图2.20所示,图片经过了拉普拉斯算子的卷积操作就变成了一幅边缘信息明显的图片。


图2.19  拉普拉斯算子


图2.20  拉普拉斯卷积边缘检测


如果我们更改卷积核中的参数或者尺寸,就会赋予卷积核提取不同特征的能力,卷积核能够提取图片中的某些特征这个作用,就决定了它能够被运用在卷积神经网络中。在卷积神经网络中,卷积核的参数就类似于之前多层神经网络中的权值,我们通过训练优化卷积核的参数就能够让卷积核提取出我们所需要的特征,从而来解决某一类问题,这就是卷积神经网络的基本思想。


一个卷积神经网络中的卷积核数量是非常多的,因为我们通常要提取的特征也特别多,比如我们不仅要提取纵向边缘特征,还要提取横向边缘特征等等,所以我们提取的特征往往是在高维度上的,而且越到网络深的地方,这些特征越不易被人所理解,这也符合隐含层的黑箱性质。


卷积的步长就是卷积核移动的距离,在进行卷积操作时,我们需要通过在图像上移动卷积核来对图像进行处理。假如我们有一幅如图2.21所示的图像,其尺寸为,每一个像素点的数值都代表灰度值,接着我们来利用图2.19所示的卷积核对这幅图像来进行卷积。


图2.21  图像示例


步长为1的卷积核移动过程如图2.22,卷积核的移动遵循“自左至右,自上而下”的原则。步长为2的卷积移动过程如图2.23所示,在卷积核按照步长移动发现不足位时,直接移动到下一目标点再继续移动。


图2.22  步长为1的卷积核移动


图2.23  步长为2的卷积核移动


由于在位数不足的时候,步长选择不合适就会发生图2.23所示的部分边界没有参与卷积操作的情况,而加边界正是用来解决这一问题。方法就是我们在图像周围添加像素,一般来说采用zero-padding即零填充,如图2.24所示,在图像周围添加一周灰度值为0的像素,这样在卷积操作进行的时候,就可以充分提取图像边缘的信息了。


图2.24  zero-padding


下面我们开始正式利用图2.19所示卷积核对图2.21的图像示例进行卷积操作,我们把步长设置为3,这样我们得到的新的图像的尺寸就会是。获得新图像的第一个像素的过程如图2.25所示,我们把卷积核的参数与图像中对应位置的参数相乘,最后求和,得到的像素值作为新图像的第一个像素,后面的得到像素值的方法类似,完整的过程如图2.26所示。


图2.25  获得第一个像素的过程



图2.26  完整卷积过程


注意:图2.26中的new image出现负数,但实际图像中的像素值范围是在0~255,一般对于运算中出现的负数,都统一处理为0,为了让读者更好的理解卷积过程,这里省略了对负值的处理。


经过了卷积操作,图像的尺寸一般都会变小,而提取出来的新图像就可以作为图像的特征,至于是图像的哪方面特征,还要取决于卷积核的具体参数。这种卷积提取特征的操作,在卷积神经网络中特别重要。


在卷积神经网络中另一种常用的操作就是池化操作,池化操作和卷积操作一样,也可以迅速地提取图像的特征。池化操作中也有步长的概念,而且在进行池化之前还要确定核尺寸。


常用的池化操作有两种,平均池化(Average pooling)和最大池化(Maximum pooling)。平均池化在卷积神经网络发展的初期比较受欢迎,它的主要过程如图2.27所示,其运算的过程就是将核尺寸内的像素值进行取平均值的运算,结果作为新图像的像素值。核移动的方向与卷积操作完全相同,也遵循“自左至右,自上而下”的规则,唯一的区别就是池化操作并没有需要训练的参数,其内核并不是一个核函数,更像一种模板。


平均池化可以提取出图像中某一区域内的像素的平均化特征,并且可以通过合理的设置步长快速减小图像的尺寸。但是平均池化的使用在现代卷积神经网络中已经很少见了,目前比较流行的是另外一种性能更好的最大池化,其主要过程如图2.28所示。最大池化认为,图像的某个区域内,像素的最大值最能代表这个区域内的特征,所以采用取最大值的方式来提取特征,这种提取方式目前已经有很广泛的运用,大量的实验表明,最大池化提取特征的方式是合理的,且性能要优于平均池化。


图2.27  平均池化


图2.28  最大池化


卷积层(Convolution layer)通常作为卷积神经网络的第一层,直接与输入相连接,如图2.29所示,我们可以简单地把卷积层的连接类比到多层神经网络不同层之间的连接,图中的X相当于多层神经网络的输入层;而卷积核的部分也就是W的部分,相当于多层神经网络的连接权值;最后的Y部分相当于多层神经网络的输出层。W部分中,卷积核的个数往往不会是1的,会是一个很大的数,这样可以通过多个不同的卷积核提取出X的多维特征,图2.29中一共有n个卷积核,步长为3,核尺寸为,每个卷积核会得到一个尺寸的新图像,从本小节开始我们把这个得到的新的图像成为特征图(Feature map)。我们可以把这些图像组合成一个的长方体,也就是说n个卷积核就会得到维的特征图。


图2.29  卷积层与输入的连接


下面我们来看看卷积层与卷积层之间是如何连接的,如图2.30所示,这个过程可能比较难理解,因为其中涉及到了多维卷积的知识,关于多维卷积我们这里暂且不提,你目前所需要的了解的就是输出的特征图的维度,只与W部分卷积核的数量有关,所以图2.30中我们用m个卷积核对上一层得到的维的特征图进行卷积操作,最后得到的特征图的维度是

图2.30  卷积层与输入的连接

池化层(Pooling layer)在卷积神经网络中通常设置在卷积层之后,用来缩小特征图尺寸或者进一步提取特征。它与卷积层的典型连接如图2.31所示,图中P部分代表池化层部分,由于经过了卷积层之后,我们得到的特征图的尺寸是,所以我们采用步长为2,核尺寸为2的池化模板来对其进行池化操作,最终得到的特征图的深度不变,尺寸却变为了


图2.31  卷积层与输入的连接

通常一个卷积神经网络的最后部分,都要通过全连接层(Fully connected layer)来进行非线性映射。通过卷积层的特征提取,最后将这些特征归于1维,让后送入全连接层进行非线性关系的学习,最后使得问题得到解决。而全连接层的本质与多层神经网络并无区别,如图2.32所示,在卷积层的最后我们将用长方体表示的特征图改成1维,作为全连接层的输入,这个输入本质上是与多层神经网络的输入层完全相同的,然后经过与多个隐含层的连接,最后连接到输出层。


图2.32  全连接层与卷积层的连接



最后,福利时间,这次我们还是直接抽奖,送4本《Python神经网络入门与实战》,感兴趣的同学可以关注【Python时代与机器学习】,回复【读书】获取抽奖小程序直接参与抽奖即可,截止12月29日周二晚20点,感谢大家的关注:

 

推荐阅读

这个NLP工具,玩得根本停不下来

征稿启示| 200元稿费+5000DBC(价值20个小时GPU算力)

完结撒花!李宏毅老师深度学习与人类语言处理课程视频及课件(附下载)

从数据到模型,你可能需要1篇详实的pytorch踩坑指南

如何让Bert在finetune小数据集时更“稳”一点

模型压缩实践系列之——bert-of-theseus,一个非常亲民的bert压缩方法

文本自动摘要任务的“不完全”心得总结番外篇——submodular函数优化

Node2Vec 论文+代码笔记

模型压缩实践收尾篇——模型蒸馏以及其他一些技巧实践小结

中文命名实体识别工具(NER)哪家强?

学自然语言处理,其实更应该学好英语

斯坦福大学NLP组Python深度学习自然语言处理工具Stanza试用

关于AINLP

AINLP 是一个有趣有AI的自然语言处理社区,专注于 AI、NLP、机器学习、深度学习、推荐算法等相关技术的分享,主题包括文本摘要、智能问答、聊天机器人、机器翻译、自动生成、知识图谱、预训练模型、推荐系统、计算广告、招聘信息、求职经验分享等,欢迎关注!加技术交流群请添加AINLPer(id:ainlper),备注工作/研究方向+加群目的。


阅读至此了,分享、点赞、在看三选一吧🙏

登录查看更多
2

相关内容

在数学(特别是功能分析)中,卷积是对两个函数(f和g)的数学运算,产生三个函数,表示第一个函数的形状如何被另一个函数修改。 卷积一词既指结果函数,又指计算结果的过程。 它定义为两个函数的乘积在一个函数反转和移位后的积分。 并针对所有shift值评估积分,从而生成卷积函数。
【经典书】《学习OpenCV 3》,1018页pdf
专知会员服务
128+阅读 · 2021年2月28日
《深度学习》圣经花书的数学推导、原理与Python代码实现
神经网络与深度学习,复旦大学邱锡鹏老师
专知会员服务
116+阅读 · 2019年9月24日
赠书福利 | 深度学习进阶: 自然语言处理
机器学习与推荐算法
20+阅读 · 2020年12月3日
【赠书】TensorFlow自然语言处理
AINLP
17+阅读 · 2019年7月14日
Python 神经网络编程
人工智能头条
9+阅读 · 2019年2月27日
下载 | 512页教程《神经网络与深度学习》,2018最新著作
机器学习算法与Python学习
48+阅读 · 2019年1月6日
人脸识别入门实战
人工智能头条
4+阅读 · 2018年12月12日
从入门到头秃,2018年机器学习图书TOP10
新智元
14+阅读 · 2018年12月8日
荐书丨Python数据分析从入门到精通
程序人生
18+阅读 · 2018年3月31日
计算机视觉与深度学习实战
炼数成金订阅号
8+阅读 · 2018年2月9日
干货 | 卷积神经网络入门这一篇就够了
数盟
6+阅读 · 2018年1月18日
Arxiv
2+阅读 · 2021年3月3日
Recent advances in deep learning theory
Arxiv
50+阅读 · 2020年12月20日
Arxiv
27+阅读 · 2020年6月19日
VIP会员
相关资讯
赠书福利 | 深度学习进阶: 自然语言处理
机器学习与推荐算法
20+阅读 · 2020年12月3日
【赠书】TensorFlow自然语言处理
AINLP
17+阅读 · 2019年7月14日
Python 神经网络编程
人工智能头条
9+阅读 · 2019年2月27日
下载 | 512页教程《神经网络与深度学习》,2018最新著作
机器学习算法与Python学习
48+阅读 · 2019年1月6日
人脸识别入门实战
人工智能头条
4+阅读 · 2018年12月12日
从入门到头秃,2018年机器学习图书TOP10
新智元
14+阅读 · 2018年12月8日
荐书丨Python数据分析从入门到精通
程序人生
18+阅读 · 2018年3月31日
计算机视觉与深度学习实战
炼数成金订阅号
8+阅读 · 2018年2月9日
干货 | 卷积神经网络入门这一篇就够了
数盟
6+阅读 · 2018年1月18日
Top
微信扫码咨询专知VIP会员