跟姥爷深度学习6 卷积网络的数学计算

news2024/11/29 0:37:55

一、前言

前面简单用TensorFlow的全连接网络做了气温预测然后深入了解了一下全连接网络的数学计算,接着用CNN(卷积)网络做了手写数字识别,本篇就接着这个节奏来看卷积网络的数学计算。

二、卷积网络回顾

前面我们使用卷积网络时并没有说太明白,特别是一些参数的含义,这里先补一下功课。

从上面的图看,我们构建的网络内部有4种不同的层(layers):卷积层(Conv2D)、池化层(MaxPooling2D)、转一维(Flatten)、全连接层(Dense),下面逐一说下。

1、卷积层

上图很好的阐释了卷积层工作原理,网上还有一些动图效果非常直观。卷积计算就是从输入中找到与卷积核(kernel)一样大小的矩阵,做对应位的乘积后加起来,得到结果的一个位。

1)Conv2D

这里的2D含义是二维数据,也就是处理输入数据为二维的卷积层,那自然还有Conv1D、Conv3D的,分别是处理一维和三维输入数据的卷积层。

2)Filters

含义是卷积核的个数,也就是上图中Kernel的数量。卷积核的数量越多则这一层输出就越多。

3)Kernel_size

含义是卷积核的大小,上面图片中的卷积核大小是3x3,我们示例用的是5x5的大小。卷积核的数量和大小共同组成了参数W、b的大小,这是类比全连接网络的概念。

4)Padding

Padding有两个参数值:VALID舍弃、SAME补足。

我们主要会使用SAME这个参数值,含义是当卷积计算结果大小较原始输入更小的话,在输入的边缘补0,使得输入输出的大小一致。下面举例:

可以看到原本的输出是2x2,为了将输出的尺寸修正为3x3,我们可以在输入的边缘增加0。

5)步长

这里隐含了一个参数是“步长=1”(stride),前面有提到卷积计算的原理是从输入中找到与卷积核一样大小的矩阵,向下图这样:

第一个矩阵:

第二个矩阵:

这里我们使用了步长为1,如果修改下步长为2则:

6)padding:VALID

知晓了步长后,我们再来看padding的VALID,为何需要丢弃。

假设kernel的大小为3x3,步长为2,则:

可以看到,由于输入的尺寸小了,导致6这一列无法被计算到,如果是padding=SAME,则会在后面补0以扩充尺寸,但对于VALID则会将6这一列丢弃,相应的计算结果的尺寸也会较小。

7)input_shape

限制输入的尺寸。

2、池化层

上图可以很直观看明白什么是池化,池化有两种,一种是求最大值的池化,另一种是求平均值池化。我们这里使用的是求最大值。

Pool_size就是池的大小,上图也是一个2x2的池。

3、一维化

所谓一维化就是将矩阵转为一维,比如下面这样:

三、精简示例

之前的示例输入是28x28,稍微大了点,我们只是要看看计算过程,所以将输入尺寸变小,同时卷积核的数量和大小也都缩小。

通过下面代码可以输出每一层的参数情况。

1)不是每一层都有参数

可以看到我们只输出了1、3、6、7层的参数,原因是池化层、转一维只是操作不带参数。

2)参数输出转置

注意看输出的时候参数矩阵是带了个T的,也就是将矩阵转置后输出。原因是矩阵表达的原因,如果不转置咱们会看不明白,所以在计算时,我们将输入也转置这样计算的结果就是一样的了。

3)各层计算结果

我们可以用下面的代码输出各层的计算结果来看,这样可以帮助我们检查每一层的手算是否都正确。下面只演示了第一层的计算结果。

四、计算过程

1、输入调整

如上图,我们先将输入转置,然后在矩阵的边缘补0。

2、卷积核与输入的“分拆”

前面说过卷积计算实际是从输入中找一个与卷积核一样大小的矩阵来做对应计算,所以我们可以将输入按规则进行“分拆”,像下面这样:

第一个小矩阵:

第二个小矩阵:

第三个小矩阵:

第四个小矩阵:

第五个小矩阵:

依次类推,我们可以得到16个小矩阵。每一个小矩阵与卷积核进行计算可以得到16个值,所以我们计算结果是一个4x4的矩阵。

需要注意,网上分拆小矩阵一般是从左到右,再从上到下。但是由于我们的输入是做了转置的,所以这里我们是先从上到下再从左到右,计算结果是一样的。

3、卷积核计算

看上图,需要注意卷积核只有一组值,也就是输入分拆出来的16个小矩阵,依次与同样的W1+b1进行计算,计算方式是输入的每一个位与W1的对应位相乘,将乘积相加然后再与b1求和。

4、池化层

所谓池化就是将矩阵进行浓缩,浓缩的办法是从矩阵中提取其“较大”值,具体过程是根据池的大小(pool_size)将输入矩阵进行分拆,分拆成数个小矩阵,然后求出各小矩阵的最大值,最后将这些取出的最大值组成新的矩阵就是池化层的输出了。

1)池化层的分拆

第一个小矩阵:

第二个小矩阵:

第三小矩阵:

第四个小矩阵:

需要注意由于转置的原因,这里分拆过程也是先从上到下再从左到右,其次这里的分拆与卷积层分拆是不一样的,卷积层有滑动步数,这里默认就是根据pool_size进行滑动了。

2)池化计算

池化非常简单,就是求最大值而已。最后将结果矩阵化就得到了下一层卷积层需要的输入了。

5、第二层卷积

有了前面的经验,第二层卷积计算更简单了。但第二层卷积有2个卷积核怎么办?其实只是多了一组W和b而已,所以同样的输入矩阵,按不同的卷积核参数计算2次即可。这样我们得到了2组输出。

6、第二次池化

将前面的计算结果分别组成2个矩阵,然后分别做池化。由于尺寸的原因导致池化后就只有一个值了,实际如果输入够大的话,池化后的结果应该是2个矩阵。

7、一维化

由于输出很少,所以一维化也很简单。如果池化结果是2个较大矩阵,一维化的过程就不那么直观了。

下面示例一下较大矩阵的一维化,其实就是两个矩阵穿插在一起了,而不是简单的左右拼接。

8、全连接层计算

全连接层计算非常简单了。

1)第一个全连接层

2)第二个全连接层计算

五、回顾

可以看到,我们手算的结果与TensorFlow计算结果大差不大,但还是有一点点的区别,可能原因是数值精度问题。

最后,一定要注意我们的输入是做了转置的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/550548.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

setContentHuggingPriority和setContentCompressionResistancePriority的使用

需求&#xff1a; 两个label并排显示&#xff0c;文字内容由服务器返回&#xff0c;label宽度以文字内容自适应&#xff0c;label之间间距大于等于10. 需要考虑以下情况&#xff1a; 当两个label的宽度和 < 屏幕宽度时&#xff0c;各自设置约束&#xff0c;无需处理&#…

【数据结构】Bloom Filter 布隆过滤器

背景 在分布式系统中&#xff0c;比如缓存Redis中&#xff0c;当出现缓存击穿问题&#xff0c;同时访问缓存和数据库都查询不到数据时&#xff0c;对缓存和数据库压力比较大&#xff0c;那么有没有好的数据结构可以快速查询一个数据是否在数据库中&#xff0c;而这个就是大名鼎…

韦东山驱动大全:第四篇 基础-Makefile

1、mount -t nfs -o nolock,vers3 192.168.1.137:/home/book/nfs_rootfs(服务器目录) /mnt(板子目录) 2、gcc -o hello hello.c -v 3、 4、

golang 微服务中的断路器 hystrix

之前说到过微服务容错处理&#xff0c;可以使用 断路器 使用断路器的原因是&#xff1a; 当下游的服务因为过载或故障&#xff0c;无法提供服务&#xff0c;我们需要及时的让上游服务知悉&#xff0c;且暂时 熔断 调用方和提供方的调用链&#xff0c;这是为了避免服务雪崩现象…

二层交换机与三层交换机区别

这两种类型交换机的工作方式有所不同&#xff1a; 二层交换机可以识别数据包中的MAC地址&#xff0c;根据MAC地址进行转发&#xff0c;并将这些MAC地址与对应的端口记录在自己内部的一个地址表中。二层交换机不遵循路由算法。三层交换机转发基于目标 IP 地址&#xff0c;数据包…

143. 重排链表

题目描述&#xff1a; 主要思路&#xff1a; 没有找到什么特殊的捷径&#xff0c;主要就是链表的一些基础操作。 实现了三个函数&#xff0c;一个是找到链表的中心结点&#xff0c;一个是将中心结点之后的链表进行翻转&#xff0c;另一个就是两段链表进行拼接。 class Soluti…

庄懂的TA笔记(十四十六)<特效:火焰 + 水流>

庄懂的TA笔记&#xff08;十四&十六&#xff09;&#xff1c;特效&#xff1a;火焰 水流&#xff1e; 目录 一、作业展示&#xff1a; 二、示范&#xff1a;火: 参考资料&#xff1a; 实现思路&#xff1a; 实践操作&#xff1a; 三、示范&#xff1a;水: 实现思路&am…

Mybatis Plus 使用@TableLogic实现逻辑删除

文章目录 步骤1:修改数据库表添加deleted列步骤2:实体类添加属性步骤3:运行删除方法知识点1&#xff1a;TableLogic 接下来要讲解是删除中比较重要的一个操作&#xff0c;逻辑删除&#xff0c;先来分析下问题: 这是一个员工和其所签的合同表&#xff0c;关系是一个员工可以签多…

如何用 ChatGPT 帮你10分钟读完数据库论文

本周&#xff0c;OpenAI 向所有 ChatGPT Plus 用户开放了两个重要功能&#xff1a; Web Browsing 和 Plugins 它俩都需要用户自己开启&#xff0c;才能使用&#xff0c;如下&#xff1a; 作为对数据库论文的爱好者&#xff0c;我第一款挑选的 Plugin 便是 ChatWithPDF,毕竟真的…

基于脉冲神经网络的物体检测

访问【WRITE-BUG数字空间】_[内附完整源码和文档] 研究的意义在于探索脉冲神经网络在目标检测上的应用&#xff0c;目前主流的脉冲神经网络训练算法有直接BP训练、STDP无监督训练和训练好的ANN的转化&#xff0c;虽然训练算法众多&#xff0c;但是SNN仍然没有一套成熟的训练算…

games101作业3

作业要求 修改函数 rasterize_triangle(const Triangle& t) in rasterizer.cpp: 在此 处实现与作业 2 类似的插值算法&#xff0c;实现法向量、颜色、纹理颜色的插值。 修改函数 get_projection_matrix() in main.cpp: 将你自己在之前的实验中 实现的投影矩阵填到此处&am…

【JUC基础】08. 三大工具类

1、前言 JUC包中包含了三个非常实用的工具类&#xff1a;CountDownLatch&#xff08;倒计数器&#xff09;&#xff0c;CyclicBarrier&#xff08;循环栅栏&#xff09;&#xff0c;Semaphore&#xff08;信号量&#xff09;。 2、倒计数器&#xff1a;CountDownLatch 2.1、…

基于Java+SpringBoot+Vue前后端分离机票预定/订购系统设计与实现(视频讲解)

博主介绍&#xff1a;✌全网粉丝3W&#xff0c;全栈开发工程师&#xff0c;从事多年软件开发&#xff0c;在大厂呆过。持有软件中级、六级等证书。可提供微服务项目搭建与毕业项目实战&#xff0c;博主也曾写过优秀论文&#xff0c;查重率极低&#xff0c;在这方面有丰富的经验…

章节2 Matplotlib 绘图基础

目录 课时 2 Matplotlib简介及绘制简单线型图 课时 3 图例和标题 课时 4 自定义图形样式 课时 4 绘制条形图 课时 2 Matplotlib简介及绘制简单线型图 线的画法 plt.plot&#xff0c;同时提供x轴坐标和y轴坐标 课时 3 图例和标题 x 轴数据默认即可&#xff0c;如下所示 x轴代…

SimpleDateFormat非线程安全问题

文章目录 1. SimpleDateFormat介绍2. 测试SimpleDateFormat的非线程安全性3. 解决方案一4. 解决方案二 1. SimpleDateFormat介绍 SimpleDateFormat是Java中的一个类&#xff0c;用于将日期对象格式化为特定的字符串表示形式&#xff0c;或者将特定格式的字符串解析为日期对象。…

netstat 连接通信的信息和状态、以及ss

netstat 常用参数 t 只显示tcpu只显示udpnnum 数字形式显示地址和端口号l listen 显示监听端口 pprogram 显示进程aall 所有连接和监听r显示路由表 netstat -lnp 显示服务监听端口tcpudpsocket &#xff0c;socket 文件也用来同一台服务器的进程之间通信的…

Spring中的MergedBeanDefinitionPostProcessor有什么作用 ?

Spring中的MergedBeanDefinitionPostProcessor有什么作用 ? 引言调用时机加载bean定义的几种方式postProcessMergedBeanDefinition接口作用小结 引言 MergedBeanDefinitionPostProcessor这个Bean后置处理器大家可能关注的比较少,其本身也只提供了一个bean生命周期回调接口: …

iptable 防火墙一

目录 iptables概述netfilter/iptables 关系四表五链四表&#xff1a;五链&#xff1a; 规则链之间的匹配顺序主机型防火墙&#xff1a;规则链内的匹配顺序&#xff1a; iptables 安装iptables防火墙的配置方法&#xff1a;iptables 命令行配置方法&#xff1a;常用的控制类型&a…

一文读懂大语言模型

以ChatGPT为代表的大语言模型被很多人认为是新一轮科技革命的起点&#xff0c;本文旨在通过概念性介绍&#xff0c;让普通人能够尽可能理解人工智能以及大语言模型的基本概念&#xff0c;从而了解这些技术能做以及不能做什么。原文: A Very Gentle Introduction to Large Langu…

v4l2数据结构分析

v4l2数据结构分析 文章目录 v4l2数据结构分析Video4Linux2设备v4l2_device媒体设备media_deviceVideo4Linux2子设备v4l2_subdevVideo4Linux2子设备的操作集v4l2_subdev_opsVideo4Linux2子设备的内部操作集v4l2_subdev_internal_opsVideo4Linux2控制处理器v4l2_ctrl_handlerVide…