写在前面:大家好!我是【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层

深度学习笔记(一):卷积层+池化层+激活函数+全连接层相关推荐

  1. 深度学习笔记 5 卷积、池化

    目录 1. 卷积 1.1 卷积的目的 1.2 卷积的基本属性 1.3 卷积的特点 2. 卷积分类与计算 2.1 标准卷积 2.2 反卷积(转置卷积) ​2.3 空洞卷积 2.4 深度可分离卷积 2.5 ...

  2. 深度学习笔记(25) 池化层

    深度学习笔记(25) 池化层 1. max pooling 2. mean pooling 3. pooling 超参 1. max pooling 除了卷积层,卷积网络也经常使用池化层来缩减模型的大 ...

  3. 深度学习基础系列| Global Average Pooling是否可以替代全连接层?

    Global Average Pooling(简称GAP,全局池化层)技术最早提出是在这篇论文(第3.2节)中,被认为是可以替代全连接层的一种新技术.在keras发布的经典模型中,可以看到不少模型甚至 ...

  4. Python学习笔记--pytorch--随机梯度下降、神经网络与全连接层

    随机梯度下降 是一个向量,代表函数在某一个点增长的方向,模代表了在该点增长的速率 影响搜索过程的因素: 初始状态,学习率,动量 激活函数 1.torch.sigmoid (0,1) a=torch.l ...

  5. 深度学习笔记:卷积神经网络的可视化--卷积核本征模式

    目录 1. 前言 2. 代码实验 2.1 加载模型 2.2 构造返回中间层激活输出的模型 2.3 目标函数 2.4 通过随机梯度上升最大化损失 2.5 生成滤波器模式可视化图像 2.6 将多维数组变换 ...

  6. 深度学习笔记 6 卷积神经网络

    目录 1.概念 2. 结构及每层详解 3. CNN特征 4. 卷积神经网络的流程 5.可变形卷积(DCN) 6.一些小问题 1. 1x1卷积作用 2. 卷积层和池化层有什么区别? 3.怎样才能减少卷积 ...

  7. 卷积、池化、激活函数、初始化、归一化、正则化、学习率——深度学习基础总结

    有幸拜读大佬言有三的书<深度学习之模型设计>,以下是我的读书笔记,仅供参考,详细的内容还得拜读原著,错误之处还望指正.下面的三张图片来自知乎. <深度学习之模型设计>读书笔记- ...

  8. 【动手学深度学习PyTorch版】15 池化层

    上一篇请移步[动手学深度学习PyTorch版]14 卷积层里的多输入多输出通道_水w的博客-CSDN博客 目录 一.池化层 1.1 池化层 ◼池化层原因 ◼ 二维最大池化 1.2 填充.步幅与多个通道 ...

  9. 深度学习 | 深入解析CNN pooling 池化层原理及其作用

    池化层作用机理 我们以最简单的最常用的max pooling最大池化层为例,对池化层作用机理进行探究.其他池化层的作用机理也大致适用这一机理,在这里就不加入讨论. 图片和以下部分内容来自 CS231n ...

最新文章

  1. filter执行先后问题_Thinkphp5框架变量覆盖导致远程代码执行
  2. 李宏毅线性代数笔记1:系统
  3. @postconstruct注解方法没有执行_把对象的创建交给spring来管理(注解IOC)
  4. 打开u盘提示不在计算机中,U盘不被电脑识别怎么办 U盘在电脑上打不开解决方法...
  5. 大数据量的存储分表常见算法
  6. c语言课程设计 职工工资处理系统,院职工工资管理系统_C语言课程设计-2017年10月.doc...
  7. 【编译原理笔记11】中间代码生成:类型表达式,声明语句的翻译
  8. Android心电数据分析,基于Android系统的心电信号采集与分析系统设计
  9. 数据库变为可疑_SQL Server 2008R2 数据库出现“可疑”导致无法访问解决办法
  10. python计算iv值_Python计算IV值的示例讲解
  11. 深度模型训练之learning rate
  12. qt项目在Linux平台上面发布成可执行程序.run
  13. 三角形的几何公式大全_高中数学公式、定理大全,你所需要的这里都有!
  14. 服务器划分不同虚拟主机,服务器划分不同虚拟主机
  15. QQ2009SP5和SP6后台会疯狂的访问qqlogo.qq.com:80
  16. 关于MVC控制器导出Excel时MemoryStream流已关闭的问题
  17. 紫铜带、黄铜带、锡磷青铜带、白铜带的特性
  18. 八爪鱼软件爬取数据的操作流程
  19. JSP javaweb餐厅点餐系统源码(点餐系统)点餐系统网上订餐系统在线订餐系统
  20. 内存烤机是什么 aida64内存测试爆红是什么原因

热门文章

  1. 以“魔镜”为代表的智能硬件,为什么火不起来?
  2. 解决'parent.relativePath' of POM xxx points at yyy instead of zzz please verify your project structure
  3. MATLAB零记忆非线性方法(ZMNL)相关韦布尔分布
  4. Openwrt增加对 sd card 支持
  5. 运营必看:网上商城的正确运营姿势
  6. 项目完成了,如何做项目的总结会议?
  7. 骑士游历(Java课设)
  8. 极狐阿尔法s 鸿蒙系统,满身黑科技 极狐阿尔法S HI版量产验证车下线
  9. VUE(10)--添加背景图片以及背景图片自适应
  10. Linux-用户管理命令以及su