深度学习笔记(一):卷积层+池化层+激活函数+全连接层
写在前面:大家好!我是【AI 菌】,一枚爱弹吉他的程序员。我
热爱AI、热爱分享、热爱开源
! 这博客是我对学习的一点总结与记录。如果您也对深度学习、机器视觉、算法、Python、C++
感兴趣,可以关注我的动态,我们一起学习,一起进步~
我的博客地址为:【AI 菌】的博客
我的Github项目地址是:【AI 菌】的Github
本教程会持续更新,如果对您有帮助的话,欢迎star收藏~
文章目录
- 1. 卷积层
- 1.1 单通道输入,单卷积核
- 1.2 多通道输入,单卷积核
- 1.3 多通道输入,多卷积核
- 1.4 填充padding
- 2. 池化层
- 3. 激活函数
- 4. 全连接层
- 5. 网络参数量与计算量
- 5.1 卷积层
- 5.2 全连接层
前言:
在图像分类以及目标检测等任务中,卷积神经网络已经得到了充分地运用。而对于常见的卷积神经网络,我们经常可以看到卷积层、池化层、激活函数、全连接层的身影。直到现在,卷积层+激活函数+池化层+全连接层的结构仍然很实用,似乎已经成为搭建卷积神经网络的标配。下面我将从这四个方面分别介绍。
注:通常,池化层和激活函数又归类于卷积层。这里为了讲解方便,我分开介绍。
理论系列:
深度学习笔记(二):激活函数总结
深度学习笔记(三):BatchNorm(BN)层
深度学习笔记(四):梯度下降法与局部最优解
深度学习笔记(五):欠拟合、过拟合
防止过拟合(5.1):正则化
防止过拟合(5.2):Dropout
防止过拟合(5.3):数据增强
实战系列:
深度学习环境搭建:Anaconda3+tensorflow2.0+PyCharm
TF2.0深度学习实战(一):分类问题之手写数字识别
TF2.0深度学习实战(二):用compile()和fit()快速搭建MINIST分类器
TF2.0深度学习实战(三):LeNet-5搭建MINIST分类器
TF2.0深度学习实战(四):搭建AlexNet卷积神经网络
TF2.0深度学习实战(五):搭建VGG系列卷积神经网络
TF2.0深度学习实战(六):搭建GoogLeNet卷积神经网络
1. 卷积层
卷积是一种有效提取图片特征的方法 。 一般用一个正方形卷积核,遍历图片上的每一个像素点。图片与卷积核重合区域内相对应的每一个像素值,乘卷积核内相对应点的权重,然后求和, 再加上偏置后,最后得到输出图片中的一个像素值。
图片分灰度图和彩色图,卷积核可以是单个也可以是多个,因此卷积操作分以下三种情况:
1.1 单通道输入,单卷积核
这里单通道指的是输入为灰度图,单卷积核值卷积核个数是1个。
上面是 5x5x1 的灰度图片,1 表示单通道,5x5 表示分辨率,共有 5 行5列个灰度值。若用一个 3x3x1 的卷积核对此 5x5x1 的灰度图片进行卷积,偏置项b=1,则求卷积的计算是:(-1)x1+0x0+1x2+(-1)x5+0x4+1x2+(-1)x3+0x4+1x5+1=1(注意不要忘记加偏置 1)。
1.2 多通道输入,单卷积核
多数情况下,输入的图片是 RGB 三个颜色组成的彩色图,输入的图片包含了红、绿、蓝三层数据,卷积核的深度(通道数)应该等于输入图片的通道数,所以使用 3x3x3的卷积核,最后一个 3 表示匹配输入图像的 3 个通道,这样这个卷积核有三通道,每个通道都会随机生成 9 个待优化的参数,一共有 27 个待优化参数 w 和一个偏置 b。
注:这里还是单个卷积核的情况,但是一个卷积核可以有多个通道。默认情况下,卷积核的通道数等于输入图片的通道数。
1.3 多通道输入,多卷积核
多通道输入、多卷积核是深度神经网络中间最常见的形式。指的是多通道输入,且用多个卷积核的情况。那么卷积过程其实也很简单,以3通道输入,2个卷积核为例:
(1)先取出一个卷积核与3通道的输入进行卷积,这个过程就和多通道输入,单卷积核一样,得到一个1通道的输出output1。同样再取出第二个卷积核进行同样的操作,得到第二个输出output2
(2)将相同size的output1与output2进行堆叠,就得到2通道的输出output。
为了更直观地理解,下面给出图示:
图中输入X:[1,h,w,3]指的是:输入1张高h宽w的3通道图片。
卷积核W:[k,k,3,2]指的是:卷积核尺寸为3*3,通道数为3,个数为2。
总结:
(1)卷积操作后,输出的通道数=卷积核的个数
(2)卷积核的个数和卷积核的通道数是不同的概念。每层卷积核的个数在设计网络时会给出,但是卷积核的通道数不一定会给出。默认情况下,卷积核的通道数=输入的通道数,因为这是进行卷积操作的必要条件。
(3)偏置数=卷积核数
1.4 填充padding
为了使卷积操作后能得到满意的输出图片尺寸,经常会使用padding对输入进行填充操作。默认在图片周围填充0。
(1)全零填充padding='same’
使用same时,会自动对原图进行全0填充,当步长为1时,可以保证输出的图片与输入的图片尺寸一致。
输出尺寸计算公式:输入长/步长 (向上取整)
TensorFlow中实现如下:(这里以卷积核个数:48,卷积核尺寸:3,步长:1,全填充为例)
layers.Conv2D(48, kernel_size=3, strides=1, padding='same')
(2)不填充padding='valid’
使用valid时,不进行任何填充,直接进行卷积,这是layers.Conv2D()默认的方式。
输出尺寸计算公式:(输入长-核长)/步长+1 (向下取整)
TensorFlow中实现如下:
layers.Conv2D(48, kernel_size=3, strides=1, padding='valid')
(3)自定义填充
一般是从上下左右四个方向进行填充,且左、右填充的列数pwp_wpw一般相同,上、下填充的行数php_hph也应该相同。如下图所示:
输出尺寸计算公式:
其中,h,w为原图的高和宽,k是卷积核的尺寸,s是步长。
在TensorFlow2.0中,自定义填充过程中,padding参数的设置格式为:
padding=[ [0,0],[上,下],[左,右],[0,0] ]
# 例如要在上下左右各填充一个单位,实现如下:
layers.Conv2D(48, kernel_size=3, strides=1, padding=[[0,0], [1,1], [1,1], [0,0]])
2. 池化层
在卷积层中,可以通过调节步长参数 s 实现特征图的高宽成倍缩小,从而降低了网络的参数量。实际上,除了通过设置步长,还有一种专门的网络层可以实现尺寸缩减功能,它就是我们要介绍的池化层(Pooling layer)。
池化层同样基于局部相关性的思想,通过从局部相关的一组元素中进行采样或信息聚合,从而得到新的元素值。通常我们用到两种池化进行下采样:
(1)最大池化(Max Pooling),从局部相关元素集中选取最大的一个元素值。
(2)平均池化(Average Pooling),从局部相关元素集中计算平均值并返回。
3. 激活函数
激活函数也是神经网络不可缺少的部分,常用的激活函数有好几种,具体如何选择合适的激活函数可参考我的这篇博文:神经网络搭建:激活函数总结
4. 全连接层
全连接层简称FC。之所以叫全连接,是因为每个神经元与前后相邻层的每一个神经元都有连接关系。如下图所示,是一个简单的两层全连接网络,输入时特征,输出是预测的结果。
全连接层的参数量是可以直接计算的,计算公式如下:
按照上图搭建的两层全连接网络,要训练分辨率仅仅是 28x28=784 的黑白图像,就有近 40 万个待优化的参数。现实生活中高分辨率的彩色图像,像素点更多,且为红绿蓝三通道信息。待优化的参数过多, 容易导致模型过拟合。为避免这种现象,实际应用中一般不会将原始图片直接喂入全连接网络。
在实际应用中,会先对原始图像进行卷积特征提取,把提取到的特征喂给全连接网络,再让全连接网络计算出分类评估值。
5. 网络参数量与计算量
5.1 卷积层
比如:输入是32x32x3的的彩色图片,经过卷积层:
layers.Conv2D(100, kernel_size=3, strides=1, padding='same')
(1)网络参数量
主要是卷积核的参数和偏置的参数:
3x3x3x100+100=2800
(2)计算量FLOPS
深度学习框架FLOPs的概念:Floating point operations,即浮点运算数量。
{32x32x[3x3+(3x3-1)]x3+32x32x(3-1)}x100
5.2 全连接层
比如第一层节点数是5,第二层节点数是10,求网络参数量和计算量FLOPS
(1)网络参数量
网络参数量主要来源神经元连接权重和偏置:
5x10+10=60
(2)计算量FLOPS
5x10+10=60
更新:
2015 年,Google 研究人员Sergey 等基于参数标准化设计了BN层。BN层提出后,广泛地应用在各种深度网络模型上,使得网络的超参数的设定更加自由,同时网络的收敛速度更快,性能也更好。
详细了解请看:神经网络搭建:BN层
深度学习笔记(一):卷积层+池化层+激活函数+全连接层相关推荐
- 深度学习笔记 5 卷积、池化
目录 1. 卷积 1.1 卷积的目的 1.2 卷积的基本属性 1.3 卷积的特点 2. 卷积分类与计算 2.1 标准卷积 2.2 反卷积(转置卷积) 2.3 空洞卷积 2.4 深度可分离卷积 2.5 ...
- 深度学习笔记(25) 池化层
深度学习笔记(25) 池化层 1. max pooling 2. mean pooling 3. pooling 超参 1. max pooling 除了卷积层,卷积网络也经常使用池化层来缩减模型的大 ...
- 深度学习基础系列| Global Average Pooling是否可以替代全连接层?
Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模型甚至 ...
- Python学习笔记--pytorch--随机梯度下降、神经网络与全连接层
随机梯度下降 是一个向量,代表函数在某一个点增长的方向,模代表了在该点增长的速率 影响搜索过程的因素: 初始状态,学习率,动量 激活函数 1.torch.sigmoid (0,1) a=torch.l ...
- 深度学习笔记:卷积神经网络的可视化--卷积核本征模式
目录 1. 前言 2. 代码实验 2.1 加载模型 2.2 构造返回中间层激活输出的模型 2.3 目标函数 2.4 通过随机梯度上升最大化损失 2.5 生成滤波器模式可视化图像 2.6 将多维数组变换 ...
- 深度学习笔记 6 卷积神经网络
目录 1.概念 2. 结构及每层详解 3. CNN特征 4. 卷积神经网络的流程 5.可变形卷积(DCN) 6.一些小问题 1. 1x1卷积作用 2. 卷积层和池化层有什么区别? 3.怎样才能减少卷积 ...
- 卷积、池化、激活函数、初始化、归一化、正则化、学习率——深度学习基础总结
有幸拜读大佬言有三的书<深度学习之模型设计>,以下是我的读书笔记,仅供参考,详细的内容还得拜读原著,错误之处还望指正.下面的三张图片来自知乎. <深度学习之模型设计>读书笔记- ...
- 【动手学深度学习PyTorch版】15 池化层
上一篇请移步[动手学深度学习PyTorch版]14 卷积层里的多输入多输出通道_水w的博客-CSDN博客 目录 一.池化层 1.1 池化层 ◼池化层原因 ◼ 二维最大池化 1.2 填充.步幅与多个通道 ...
- 深度学习 | 深入解析CNN pooling 池化层原理及其作用
池化层作用机理 我们以最简单的最常用的max pooling最大池化层为例,对池化层作用机理进行探究.其他池化层的作用机理也大致适用这一机理,在这里就不加入讨论. 图片和以下部分内容来自 CS231n ...
最新文章
- filter执行先后问题_Thinkphp5框架变量覆盖导致远程代码执行
- 李宏毅线性代数笔记1:系统
- @postconstruct注解方法没有执行_把对象的创建交给spring来管理(注解IOC)
- 打开u盘提示不在计算机中,U盘不被电脑识别怎么办 U盘在电脑上打不开解决方法...
- 大数据量的存储分表常见算法
- c语言课程设计 职工工资处理系统,院职工工资管理系统_C语言课程设计-2017年10月.doc...
- 【编译原理笔记11】中间代码生成:类型表达式,声明语句的翻译
- Android心电数据分析,基于Android系统的心电信号采集与分析系统设计
- 数据库变为可疑_SQL Server 2008R2 数据库出现“可疑”导致无法访问解决办法
- python计算iv值_Python计算IV值的示例讲解
- 深度模型训练之learning rate
- qt项目在Linux平台上面发布成可执行程序.run
- 三角形的几何公式大全_高中数学公式、定理大全,你所需要的这里都有!
- 服务器划分不同虚拟主机,服务器划分不同虚拟主机
- QQ2009SP5和SP6后台会疯狂的访问qqlogo.qq.com:80
- 关于MVC控制器导出Excel时MemoryStream流已关闭的问题
- 紫铜带、黄铜带、锡磷青铜带、白铜带的特性
- 八爪鱼软件爬取数据的操作流程
- JSP javaweb餐厅点餐系统源码(点餐系统)点餐系统网上订餐系统在线订餐系统
- 内存烤机是什么 aida64内存测试爆红是什么原因
热门文章
- 以“魔镜”为代表的智能硬件,为什么火不起来?
- 解决'parent.relativePath' of POM xxx points at yyy instead of zzz please verify your project structure
- MATLAB零记忆非线性方法(ZMNL)相关韦布尔分布
- Openwrt增加对 sd card 支持
- 运营必看:网上商城的正确运营姿势
- 项目完成了,如何做项目的总结会议?
- 骑士游历(Java课设)
- 极狐阿尔法s 鸿蒙系统,满身黑科技 极狐阿尔法S HI版量产验证车下线
- VUE(10)--添加背景图片以及背景图片自适应
- Linux-用户管理命令以及su