记录学习《手动学习深度学习》这本书的笔记(三)
这两天看完了第六章:卷积神经网络,巧的是最近上的专业选修课刚讲完卷积神经网络,什么卷积层池化层听得云里雾里的,这一章正好帮我讲解了基础的知识。
第六章:卷积神经网络
6.1 从全连接层到卷积
在之前的学习中,我们主要学习的是全连接层,在处理二维图像中的做法是将图像平展为一维数组,但这样显然没有考虑到图像的空间性,而卷积,就是将图像相近像素之间互相关性提取出来,让机器能够从图像中学习到更多有效信息的重要模型。
在之前学到的多层感知机可以有效处理表格数据,但对于高维数据,多层感知机存在许多限制,比如,缺乏平移不变性和局部性。
修改全连接层,将全连接层的权重W改为具有平移不变性(对无论哪个位置的输入,都采取同样操作)。
然后我们就可以得到卷积操作。
接着再改写一下形式,对图像的处理还需要局部性,即获取某个位置的信息,我们不能让偏移到离这个位置很远的地方去。
这就是卷积层的基本形式,就像是对二维图像每个一定区域内的数值执行固定权重的全连接一样,满足了平移不变性和局部性。
其中V叫做卷积核或滤波器。
其实这不是严格意义的数学里的卷积,但是非常类似,所以用了这个名字。
卷积也可有多通道,即对相同数据使用不同参数的卷积层,有的用于识别边缘,有的用于识别纹理,或者比如用卷积处理图像的时候,图像的颜色通常包含三原色,这时可以用三通道卷积层分别提取三种颜色特征。
卷积通常比全连接参数少,但依旧获得高效用。
6.2 图像卷积
这里举了一个简单的例子,实现了简单的卷积:
X:
array([[1., 1., 0., 0., 0., 0., 1., 1.],[1., 1., 0., 0., 0., 0., 1., 1.],[1., 1., 0., 0., 0., 0., 1., 1.],[1., 1., 0., 0., 0., 0., 1., 1.],[1., 1., 0., 0., 0., 0., 1., 1.],[1., 1., 0., 0., 0., 0., 1., 1.]])
比如提取这个“图像”的边缘,我们就可以用到卷积,将这个数组进行K=torch.tensor([[1.0, -1.0]])的卷积,进行卷积运算后得到:
Y:
array([[ 0., 1., 0., 0., 0., -1., 0.],[ 0., 1., 0., 0., 0., -1., 0.],[ 0., 1., 0., 0., 0., -1., 0.],[ 0., 1., 0., 0., 0., -1., 0.],[ 0., 1., 0., 0., 0., -1., 0.],[ 0., 1., 0., 0., 0., -1., 0.]])
但在实际中我们不可能每一个都人工设计卷积,所以要使用进行训练的方法。
conv2d = nn.Conv2d(1, 1, kernel_size = (1, 2), bias = False)X = X.reshape((1, 1, 6, 8))
Y = Y.reshape((1, 1, 6, 7))
lr = 3e-2for i in range(10):Y_hat = conv2d(X)l = (Y_hat - Y)**2conv2d.zero_grad()l.sum().backward()conv2d.weight.data[:] -= lr * conv2d.weight.gradprint(f'epoch {i+1}, loss {l.sum():.3f}')
这时输出conv2d.weight.data.reshape(1, 2),结果为:
tensor([[ 1.0010, -0.9739]])
与手动设计的卷积核非常相近。
最后介绍了特征映射和感受野两个概念,特征映射是指如上面例子所示输出的卷积层,因为它可以被视为一个输入映射到下一空间维度的转换器,感受野是指最初的输入中用于计算的所有元素(可能比输入元素多)。
6.3 填充与步幅
填充是为了解决进行卷积中常常丢失边缘特征而提出的,将输入数组的外围增添一层或多层0元素,可以有效解决丢失边缘像素的问题。
步幅的引用是为了高效滑动数组,步幅决定计算卷积时每次向左向下平移多少距离。
可以通过这样实现:
conv2d = nn.Conv2d(1, 1, kernel_size = (3, 5), padding = (0, 1), stride = (3, 4))
这里的参数分别为输入通道、输出通道、卷积核形状、填充大小、步幅大小。
6.4 多输入多输出通道
上面说了卷积也可有多通道,多通道输入例子:

将输入的不同通道用不同卷积核进行卷积运算,最后再将两个结果相加。
多通道输出就是将同一输入按不同卷积核进行运算,最后得到两个不同结果。
还有一个经常使用到的1×1卷积,虽然它失去了很多卷积的特点,更像一个全连接层,但它可以用于特征降维、调整网络层通道数量、控制模型复杂性。
6.5 汇聚层(池化层)
提起卷积神经网络经常会出现池化层这个概念,以前一直都不明白这是什么东西,今天算是明白了。
分为最大汇聚和平均汇聚,池化层是没有参数这些东西的,它就是简单的计算输入数据在某一区域的最大值或平均值。
它的主要作用是减弱卷积层对位置的过度敏感。
一个池化层的代码:
def pool2d(X, pool_size, mode):p_h, p_w = pool_sizeY = torch.zeros(X.shape[0] - p_h +1, X.shape[0] - p_w +1)for i in range(Y.shape[0]):for j in range(Y.shape[1]):if mode == 'max':Y[i, j] = X[i: i + p_h, j: j + p_w].max()elif mode == 'avg':Y[i: j] = X[i: i + p_h, j: j + p_w].mean() return Y
执行
pool2d(X, (2, 2), 'avg')
就可以得到X经过平均汇聚层的输出。
和卷积层一样,池化层也可以设置填充和步幅:
pool2d = nn.MaxPool2d(3, padding = 1, stride = 2)
pool2d(X)
同样也可有多个通道,不过池化层的输入通道数和输出通道数是相同的。
6.6 卷积神经网络(LeNet)
用卷积层代替全连接层的一个好处就是:可以在图像中保留空间结构,并且使模型更简洁,所需参数更少。
LeNet是最早发明的卷积神经网络之一。
它由以下两个部分组成:卷积编码器、全连接层稠密块。

卷积编码器由两个卷积块构成,每个卷积块包含一个卷积层、一个sigmoid激活函数、一个平均汇聚层。
全连接层稠密块由三个全连接层构成。
用Sequential块实现就是:
net = nn.Sequential(nn.Conv2d(1, 6, kernel_size = 5, padding = 2),nn.Sigmoid(),nn.AvgPool2d(kernel_size = 2, stride = 2),nn.Conv2d(6, 16, kernel_size = 5),nn.Sigmoid(),nn.AvgPool2d(kernel_size = 2, stride = 2),nn.Flatten(),nn.Dense(120, activation='sigmoid'),nn.Dense(84, activation='sigmoid'),nn.Dense(10)
)
然后就可以进行模型训练评估。
相关文章:
记录学习《手动学习深度学习》这本书的笔记(三)
这两天看完了第六章:卷积神经网络,巧的是最近上的专业选修课刚讲完卷积神经网络,什么卷积层池化层听得云里雾里的,这一章正好帮我讲解了基础的知识。 第六章:卷积神经网络 6.1 从全连接层到卷积 在之前的学习中&…...
JS中递归函数的理解及展开运算符在递归种的运用理解
<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>递归函数</title> </head> <body> <script>const list ["你好", "吃饭了吗",["好",[[&qu…...
人工智能学习用的电脑安装cuda、torch、conda等软件,版本的选择以及多版本切换
接触人工智能的学习三个月了,每天与各种安装包作斗争,缺少依赖包、版本高了、版本低了、不兼容了、系统做一半从头再来了。。。这些都是常态。三个月把单位几台电脑折腾了不下几十次安装,是时候总结一下踩过的坑和积累的经验了。 以一个典型的…...
提高身份证 OCR 识别 API 接口的准确性的方法
身份证OCR识别API接口能够快速、准确地识别并提取身份证上的文字信息,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限等关键内容,将其转化为计算机可处理的结构化数据,从而实现身份证信息的自动化录入和处理࿰…...
PHP面向对象
在 PHP 中,面向对象编程(Object-Oriented Programming,简称 OOP)是一种编程范式,它使用“对象”来组织和设计代码。对象是类的实例,类是定义对象特征和行为的蓝图。面向对象编程的主要目标是提高代码的可重…...
Tomcat新手成长之路:安装部署优化全解析(下)
接上篇《Tomcat新手成长之路:安装部署优化全解析(上)》: link 文章目录 7.应用部署7.1.上下文7.2.启动时进行部署7.3.动态应用部署 8.Tomcat 类加载机制8.1.简介8.2.类加载器定义8.3.XML解析器和 Java 9.JMS监控9.1.简介9.2.启用 JMX 远程监…...
GPT 1到4代的演进笔记
1. GPT-1 标题是 Improving Language Understanding by Generative Pre-Training. 发表于 2018.02, 比 bert(发布于 2018.10) 早了半年. 1.1 动机 困难:NLU 任务是多样的, 有 {textual entailment, question answering, semantic similarity assessment, document classifica…...
vitepress组件库文档项目 markdown语法大全(修正版)
#上次总结的 有些语法是用在markdown文档中的 使用到vitepress项目中有些语法可能有出入 于是我再总结一版 vitepress项目中的markdown语法大全 在阅读本章节之前,请确保你已经对 Markdown 有所了解。如果你还不了解 Markdown ,请先学习一些Markdown 教…...
Vue3技术开发,使用纯CSS3动手制作一个3D环绕的相册展示效果,支持传入任意图片.3D轮播相册的组件
主要讲述封装一个3D轮播相册的组件,效果图如下,仅仅传入一个图片的数组即可,效果如下: 使用Vue3技术开发,支持传入任意张数的图片。 使用方法 <template><Swiper :list"list" /> </templat…...
LeetCode 力扣 热题 100道(十五)搜索插入位置(C++)
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 代码如下所示: class Solution { public:int searchIns…...
【035】基于51单片机俄罗斯方块游戏机【Proteus仿真+Keil程序+报告+原理图】
☆、设计硬件组成:51单片机最小系统LCD12864液晶显示按键控制。 1、设计采用STC89C52、AT89C52、AT89S52作为主控芯片,采用LCD12864液晶作为显示,大屏显示就是刺激; 2、游戏设置十个关卡,每个关卡累计99分即可进入下…...
NAT traversal 原理 | TCP / UDP/ P2P
注:本文为 “NAT traversal ”相关的几篇文章合辑。 未整理去重。 NAT 穿越技术原理 Li_yy123 于 2020-12-08 18:54:26 发布 一、NAT 由来 为了解决全球公有 IPv4 的稀缺,提出了 NAT 技术。NAT 是 Network Address Translation 网络地址转换的缩写。 …...
如何成长为一名工程技术经理
https://medium.com/srivatsan-sridharan/how-to-grow-as-an-engineering-manager-687cad0bcac7 作为一名工程技术经理,你可能已经积累了丰富的团队管理经验,并展示了出色的项目管理、优先级管理和员工指导能力。然而,尽管如此,你…...
GEE开发之下载海拔、坡度、坡向数据
GEE开发之加载海拔、坡度、坡向数据 方法一:加载elevation、slope、aspect和hillshade数据方法二:加载elevation、slope、aspect数据 前言:根据矢量图加载海拔、坡度、坡向和山体阴影。 方法一:加载elevation、slope、aspect和hil…...
gozero项目迁移与新服务器环境配置,包含服务器安装包括go版本,Nginx,项目配置包括Mysql,redis,rabbit,域名
迁移 **GoZero** 项目到新服务器并配置相关环境涉及多个步骤。以下是一个系统化的指南,涵盖服务器环境安装、数据库和缓存配置、项目部署以及域名绑定。 ### 步骤概述 1. **服务器环境配置** - 安装 Go 语言环境 - 安装 Nginx - 安装 MySQL 和 Redis -…...
Scala正则表达式全面教程
一、正则表达式概述 正则表达式(Regular Expression,简称RegEx)是一种用于字符串搜索和操作的强大工具,它使用单个字符串来描述、匹配一系列符合某个句法规则的字符串。在Scala中,正则表达式通过scala.util.matching.…...
伺服电机为什么会变慢?
在现代工业自动化和控制系统中,伺服电机因其高效性和精确的控制能力而被广泛应用于各类机器和设备。然而,在实际使用中,有时用户会发现伺服电机的运行速度出现了下降的现象。这一变化不仅会影响生产效率,还可能对设备的安全性和可…...
61 基于单片机的小车雷达避障及阈值可调
所有仿真详情导航: PROTEUS专栏说明-CSDN博客 目录 一、主要功能 二、硬件资源 三、主程序编程 四、资源下载 一、主要功能 基于51单片机,采用超声波传感器检测距离,通过LCD1602显示屏显示,三个按键,第一个按键是…...
微信小程序之手机归属地查询
微信小程序之手机归属地查询 需求描述 API申请和小程序设置 API申请 第一步:完整账号注册 我们需要来到如下网站,注册账号:万维易源 第二步:账号注册完成以后,点击右上角的控制台信息。 第三步:在控制…...
ElementUI 问题清单
1、form 下面只有一个 input 时回车键刷新页面 原因是触发了表单默认的提交行为,给el-form 加上submit.native.prevent就行了。 <el-form inline submit.native.prevent><el-form-item label"订单号"><el-inputv-model"query.order…...
WeChatExporter:免费开源工具,三步轻松备份你的微信聊天记录到电脑
WeChatExporter:免费开源工具,三步轻松备份你的微信聊天记录到电脑 【免费下载链接】WeChatExporter 一个可以快速导出、查看你的微信聊天记录的工具 项目地址: https://gitcode.com/gh_mirrors/wec/WeChatExporter 你是否担心过手机丢失、系统崩…...
避坑指南:Volcano负载感知重调度实战,解决K8s节点负载不均问题
Volcano负载感知重调度实战:解决Kubernetes节点资源冷热不均的终极方案 凌晨三点,告警铃声刺破运维室的宁静——某电商大促期间,Kubernetes集群中三个节点CPU飙升至95%,而其他节点利用率不足20%。这种典型的"热点"现象不…...
华硕笔记本风扇异常修复终极指南:用G-Helper轻松解决散热问题
华硕笔记本风扇异常修复终极指南:用G-Helper轻松解决散热问题 【免费下载链接】g-helper Lightweight, open-source control tool for ASUS laptops and ROG Ally. Manage performance modes, fans, GPU, battery, and RGB lighting across Zephyrus, Flow, TUF, St…...
用Python+Neo4j构建A股知识图谱:从同花顺网页到Cypher查询的完整实战
用PythonNeo4j构建A股知识图谱:从数据采集到智能分析的完整技术方案 金融数据分析领域正在经历一场由知识图谱技术驱动的变革。本文将分享一个完整的A股知识图谱构建方案,涵盖从同花顺网页数据采集到Neo4j图数据库应用的完整技术链路。不同于简单的工具使…...
从ARXML文件反推软件架构:一个ComM模块的配置实例如何映射到你的C代码
从ARXML到C代码:ComM模块配置的逆向工程实战 当你第一次打开ComM_Cfg_SWCD.arxml文件时,那些层层嵌套的XML标签是否让你感到无从下手?作为AUTOSAR开发中最关键的配置文件之一,ARXML实际上是一张精确的"施工图纸"&#x…...
终极指南:如何在Windows上安装和使用FlipIt翻页时钟屏保
终极指南:如何在Windows上安装和使用FlipIt翻页时钟屏保 【免费下载链接】FlipIt Flip Clock screensaver 项目地址: https://gitcode.com/gh_mirrors/fl/FlipIt 想要为你的Windows电脑增添一抹复古优雅的时间艺术吗?FlipIt翻页时钟屏保正是你需要…...
Java实战:阿里云OSS文件操作工具类封装与优化
1. 阿里云OSS基础认知与Java集成准备 第一次接触阿里云OSS时,我完全被文档里那些专业术语搞懵了。后来才明白,它本质上就是个超级网盘,只不过比我们平时用的网盘更专业、更稳定。想象一下,你有个无限容量的保险箱,可以…...
Event-B精化实战(三)——分布式文件传输协议的奇偶校验优化
1. 从数值比较到奇偶校验的逻辑跃迁 第一次看到用奇偶性替代数值比较的方案时,我正坐在实验室调试一个分布式存储系统。当时系统里两个节点的指针同步逻辑已经让状态机复杂得像团乱麻,直到偶然翻到Event-B的奇偶校验优化案例,才恍然大悟——原…...
Movie_Recommend系统架构解析:从数据采集到推荐展示
Movie_Recommend系统架构解析:从数据采集到推荐展示 【免费下载链接】Movie_Recommend 基于Spark的电影推荐系统,包含爬虫项目、web网站、后台管理系统以及spark推荐系统 项目地址: https://gitcode.com/gh_mirrors/mo/Movie_Recommend Movie_Rec…...
基于TINA的英飞凌功率MOSFET SPICE瞬态仿真与损耗优化实战
1. 功率MOSFET仿真基础与TINA软件入门 电力电子工程师在设计电源系统时,最头疼的问题之一就是如何准确预测功率MOSFET的损耗。我刚开始接触这个领域时,曾经因为低估了开关损耗导致整个电源模块过热报废,损失惨重。后来发现,TINA-T…...
