课程名称 | 零基础入门深度学习python
授课讲师 | 孙高峰 百度深度学习技术平台部资深研发工程师web
授课时间 | 每周2、周四晚20:00-21:00算法
编辑整理 | 孙高峰网络
内容来源 | 百度飞桨深度学习集训营架构
出品平台 | 百度飞桨函数
下载安装命令 ## CPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
01 导读学习
本课程是百度官方开设的零基础入门深度学习课程,主要面向没有深度学习技术基础或者基础薄弱的同窗,帮助你们在深度学习领域实现从0到1+的跨越。从本课程中,你将学习到:url
-
深度学习基础知识spa
-
numpy实现神经网络构建和梯度降低算法.net
-
计算机视觉领域主要方向的原理、实践
-
天然语言处理领域主要方向的原理、实践
-
个性化推荐算法的原理、实践
本周为开讲第三周,百度深度学习技术平台部资深研发工程师孙高峰,开始讲解深度学习在计算机视觉方向实践应用。今天为你们带来的是卷积神经网络基础之池化和Relu。
02 池化(Pooling)
池化是使用某一位置的相邻输出的整体统计特征代替网络在该位置的输出,其好处是当输入数据作出少许平移时,通过池化函数后的大多数输出还能保持不变。好比:当识别一张图像是不是人脸时,咱们须要知道人脸左边有一只眼睛,右边也有一只眼睛,而不须要知道眼睛的精确位置,这时候经过约化某一片区域的像素点来获得整体统计特征会显得颇有用。因为池化以后特征图会变得更小,若是后面链接的是全链接层,能有效的减少神经元的个数,节省存储空间并提升计算效率。如 图10 所示,将一个的区域池化成一个像素点。一般有两种方法,平均池化和最大池化。
图10:池化
-
如图10(a):平均池化。这里使用大小为的池化窗口,每次移动的步长也为2,对池化窗口内的元素数值取平均,获得相应的输出特征图的像素值。
-
如图10(b):最大池化。对池化窗口覆盖区域内的元素取最大值,获得输出特征图的像素值。当池化窗口在图片上滑动时,会获得整张输出特征图。池化窗口的大小称为池化大小,用表示。在卷积神经网络中用的比较多的是窗口大小为,步长也为2的池化。
与卷积核相似,池化窗口在图片上滑动时,每次移动的步长称为步幅,当宽和高方向的移动大小不同时,分别用和表示。也能够对须要进行池化的图片进行填充,填充方式与卷积相似,假设在第一行以前填充行,在最后一行后面填充行。在第一列以前填充列,在最后一列以后填充列,则池化层的输出特征图大小为:
在卷积神经网络中,一般使用大小的池化窗口,步幅也使用2,填充为0,则输出特征图的尺寸为:
经过这种方式的池化,输出特征图的高和宽都减半,但通道数不会改变。
03 ReLU激活函数
前面介绍的网络结构中,广泛使用Sigmoid函数作激活函数。在神经网络发展的早期,Sigmoid函数用的比较多,而目前用的较多的激活函数是ReLU。这是由于Sigmoid函数在反向传播过程当中,容易形成梯度的衰减。让咱们仔细观察Sigmoid函数的形式,就能发现这一问题。
Sigmoid激活函数定义以下:
ReLU激活函数的定义以下:
下面的程序画出了Sigmoid和ReLU函数的曲线图:
# ReLU和Sigmoid激活函数示意图import numpy as npimport matplotlib.pyplot as pltimport matplotlib.patches as patchesplt.figure(figsize=(10, 5))# 建立数据xx = np.arange(-10, 10, 0.1)# 计算Sigmoid函数s = 1.0 / (1 + np.exp(0. - x))# 计算ReLU函数y = np.clip(x, a_min=0., a_max=None)###################################### 如下部分为画图代码f = plt.subplot(121)plt.plot(x, s, color='r')currentAxis=plt.gca()plt.text(-9.0, 0.9, r'$y=Sigmoid(x)$', fontsize=13)currentAxis.xaxis.set_label_text('x', fontsize=15)currentAxis.yaxis.set_label_text('y', fontsize=15)f = plt.subplot(122)plt.plot(x, y, color='g')plt.text(-3.0, 9, r'$y=ReLU(x)$', fontsize=13)currentAxis=plt.gca()currentAxis.xaxis.set_label_text('x', fontsize=15)currentAxis.yaxis.set_label_text('y', fontsize=15)plt.show()
- 梯度消失现象
在神经网络里面,将通过反向传播以后,梯度值衰减到接近于零的现象称做梯度消失现象。
从上面的函数曲线能够看出,当x为较大的正数的时候,Sigmoid函数数值很是接近于1,函数曲线变得很平滑,在这些区域Sigmoid函数的导数接近于零。当x为较小的负数的时候,Sigmoid函数值很是接近于0,函数曲线也很平滑,在这些区域Sigmoid函数的导数也接近于0。只有当x的取值在0附近时,Sigmoid函数的导数才比较大。能够对Sigmoid函数求导数,结果以下所示:
从上面的式子能够看出,Sigmoid函数的导数最大值为。前向传播时,;而在反向传播过程当中,x的梯度等于y的梯度乘以Sigmoid函数的导数,以下所示:
使得x的梯度数值最大也不会超过y的梯度的。
因为最开始是将神经网络的参数随机初始化的,x颇有可能取值在数值很大或者很小的区域,这些地方均可能形成Sigmoid函数的导数接近于0,致使x的梯度接近于0;即便x取值在接近于0的地方,按上面的分析,通过Sigmoid函数反向传播以后,x的梯度不超过y的梯度的,若是有多层网络使用了Sigmoid激活函数,则比较靠前的那些层梯度将衰减到很是小的值。
ReLU函数则不一样,虽然在的地方,ReLU函数的导数为0。可是在的地方,ReLU函数的导数为1,可以将y的梯度完整的传递给x,而不会引发梯度消失。
04 总结
本文重点展开讲解了卷积神经网络里面的经常使用模块,如池化和Relu。在后期课程中,将继续为你们带来内容更丰富的课程,帮助学员快速掌握深度学习方法。
【如何学习】
-
如何观看配套视频?如何代码实践?
视频+代码已经发布在AI Studio实践平台上,视频支持PC端/手机端同步观看,也鼓励你们亲手体验运行代码哦。扫码或者打开如下连接:
https://aistudio.baidu.com/aistudio/course/introduce/888
-
学习过程当中,有疑问怎么办?
加入深度学习集训营QQ群:726887660,班主任与飞桨研发会在群里进行答疑与学习资料发放。
-
如何学习更多内容?
百度飞桨将经过飞桨深度学习集训营的形式,继续更新《零基础入门深度学习》课程,由百度深度学习高级研发工程师亲自授课,每周2、每周四8:00-9:00不见不散,采用直播+录播+实践+答疑的形式,欢迎关注~
请搜索AI Studio,点击课程-百度架构师手把手教深度学习,或者点击https://aistudio.baidu.com/aistudio/course/introduce/888收看。
下载安装命令 ## CPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/cpu paddlepaddle ## GPU版本安装命令 pip install -f https://paddlepaddle.org.cn/pip/oschina/gpu paddlepaddle-gpu
>> 访问 PaddlePaddle 官网,了解更多相关内容。