《动手学深度学习》-19卷积层

news2025/1/12 13:29:06

沐神版《动手学深度学习》学习笔记,记录学习过程,详细的内容请大家购买书籍查阅。

b站视频链接
开源教程链接

卷积

在这里插入图片描述

使用一个12M像素的相机采集图片,因为是RGB图片所以有36M元素。
使用MLP来做分类会遇到的问题:
在这里插入图片描述
参数太大,GPU连参数都存不下:
在这里插入图片描述
引入卷积:
在这里插入图片描述
在图片里找模式的原则,启发了卷积的设计:
在这里插入图片描述
将全连接层重新变换一下,做成一个二维的输入输出。
在这里插入图片描述
按照MLP的思想要为每一个卷积核大小的像素区域分配一个卷积核,而添加平移不变性和局部性,使得卷积核可以进行移动(模式/识别器不变),同时降低了参数量。
在这里插入图片描述
在这里插入图片描述
总结
卷积是一个特殊的全连接层:在这里插入图片描述

卷积层

在这里插入图片描述
卷积计算,卷积核2*2:
在这里插入图片描述
二维卷积层,输出Y: ( n k − k h + 1 ) ∗ ( n w − k w + 1 ) (n_k-k_h+1)*(n_w-k_w+1) (nkkh+1)(nwkw+1),少了 k − 1 k-1 k1
在这里插入图片描述
不同卷积核带来的效果,不同的任务决定最后卷积核的样子:
在这里插入图片描述
虽然说是卷积层,实现时其实是交叉相关:
在这里插入图片描述
一维卷积与三维卷积:
在这里插入图片描述
卷积核的大小控制了局部性,是超参数:
在这里插入图片描述

动手学

互相关运算

import torch
from torch import nn
from d2l import torch as d2l

def corr2d(X, K):  #@save
    """计算二维互相关运算"""
    h, w = K.shape
    Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1))
    for i in range(Y.shape[0]):
        for j in range(Y.shape[1]):
            Y[i, j] = (X[i:i + h, j:j + w] * K).sum()
    return Y
X = torch.tensor([[0.0, 1.0, 2.0], [3.0, 4.0, 5.0], [6.0, 7.0, 8.0]])
K = torch.tensor([[0.0, 1.0], [2.0, 3.0]])
corr2d(X, K)
tensor([[19., 25.],
        [37., 43.]])

实现二维卷积层

class Conv2D(nn.Module):
    def __init__(self, kernel_size):
        super().__init__()
        self.weight = nn.Parameter(torch.rand(kernel_size)) # 0-1
        self.bias = nn.Parameter(torch.zeros(1))

    def forward(self, x):
        return corr2d(x, self.weight) + self.bias

图像中目标的边缘检测

X = torch.ones((6, 8)) # 图像
X[:, 2:6] = 0
X
tensor([[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]]) # 卷积核
K
tensor([[ 1., -1.]])
Y = corr2d(X, K)
Y
tensor([[ 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.]])
corr2d(X.t(), K) # 无法做垂直检测
tensor([[0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.],
        [0., 0., 0., 0., 0.]])

学习卷积核

# 构造一个二维卷积层,它具有1个输出通道和形状为(1,2)的卷积核
conv2d = nn.Conv2d(1,1, kernel_size=(1, 2), bias=False)

# 这个二维卷积层使用四维输入和输出格式(批量大小、通道、高度、宽度),
# 其中批量大小和通道数都为1
X = X.reshape((1, 1, 6, 8))
Y = Y.reshape((1, 1, 6, 7))
lr = 3e-2  # 学习率

for i in range(10):
    Y_hat = conv2d(X)
    l = (Y_hat - Y) ** 2
    conv2d.zero_grad()
    l.sum().backward()
    # 迭代卷积核
    conv2d.weight.data[:] -= lr * conv2d.weight.grad
    if (i + 1) % 2 == 0:
        print(f'epoch {i+1}, loss {l.sum():.3f}')
epoch 2, loss 2.274
epoch 4, loss 0.508
epoch 6, loss 0.137
epoch 8, loss 0.044
epoch 10, loss 0.016
conv2d.weight.data.reshape((1, 2))
tensor([[ 0.9806, -1.0056]])

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

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

相关文章

goland 中的调试器 -- Evaluate

今天一个好朋友 找到我,问我关于goland中Evaluate 小计算器的使用方式,说实话,我在此之前也没用过这个东西,然后我就找一些相关文档,但是这类文档少的可怜,所以我就稍微研究一下,找找材料&#…

【附安装包】Vero visi2021安装教程

软件介绍 Vero visi是世界领先的CAD/CAM解决方案,又简称为visi,由多个模块组成,包括VISI Modelling、VISI Analysis、VISI Mould、VISI Flow、VISI Electrode、VISI Progress、VISI Multi-Slides、VISI Machining 2D、VISI PEPS-Wire、WorkX…

《操作系统真象还原》学习笔记:第七章 中断

由于 CPU 获知了计算机中发生的某些事,CPU 暂停正在执行的程序,转而去执行处理该事件的程序,当这段程序执行完毕后,CPU 继续执行刚才的程序。整个过程称为中断处理,也称为中断。 把中断按事件来源分类,来自…

nginx:正向代理与反向代理

所谓代理服务器,就是位于发起请求的客户端与原始服务器端之间的一台跳板服务器, 正向代理可以隐藏客户端:想要实现正向代理,得配置一台转发请求的跳板服务器,同时客户端还得配置跳板服务器的代理地址。 我的电脑访问这…

5大轻量开源的项目管理软件推荐,更适合中小团队!

随着互联网的发展,项目管理软件越来越受到企业和团队的重视。不仅可以提高工作效率,还可以帮助团队协作、进度跟踪和资源管理等方面,简化复杂的项目管理流程。那么,对于中小团队来说,有没有一款轻量易上手的适合他们的…

网络防御与蓝队实践:探讨网络防御策略、入侵检测系统、安全事件响应等蓝队方面的实际案例和方法

第一章:引言 网络安全一直是当今信息社会中至关重要的话题。随着技术的不断发展,网络威胁也愈发复杂和隐匿。在这样的背景下,网络防御变得尤为重要,蓝队作为网络防御的重要一环,起着至关重要的作用。本文将深入探讨网…

libdrm全解析一 —— 总述

本文参考以下博文: Linux libdrm代码完全解析 LIBDRM使用 最简单的DRM应用程序 (single-buffer) Linux libdrm库入门教程 10. DRM图形显示框架 LIBDRM 特此致谢! 一、介绍 BLFS中给出的介绍 libdrm提供了一个用户空间库&…

2023年湖北中级工程师职称申报专业有哪些?甘建二告诉你

中级职称职称申报专业:环境工程、 土木建筑、土建结构、土建监理、土木工程、岩石工程、岩土、土岩方、风景园林、园艺、园林、园林建筑、园林工程、园林绿化、古建筑园林、工民建、工民建安装、建筑、建筑管理、建筑工程、建筑工程管理、建筑施工、建筑设计、建筑装…

36k字从Attention解读Transformer及其在Vision中的应用(附pytorch代码)

文章目录 0.卷积操作1.注意力1.1 注意力概述(Attention)1.1.1 Encoder-Decoder1.1.2 查询、键和值1.1.3 注意力汇聚: Nadaraya-Watson 核回归 1.2 注意力评分函数1.2.1 加性注意力1.2.2 缩放点积注意力 1.3 自注意力(Self-Attenti…

舍不得跳过的广告?900万播放冲上B站热门

8月17日,B站官方公布了2023年第二季度财报。 B站在用户增长方面又创新高,本季度财报显示,B站日均活跃用户达9650万,同比增长15%。用户日均使用时长94分钟,创同期历史新高成为一大亮点。 除此之外,B站还放…

Lnton羚通视频算法算力云平台如何快速了解pandas(上)

创建对象 创建 Series s pd.Series([1, 2, 3, 6, np.nan, 6, 8, 10]) s0 1.0 1 2.0 2 3.0 3 6.0 4 NaN 5 6.0 6 8.0 7 10.0 dtype: float64创建 DataFrame 利用 date_range 创建时间索引,并用 numpy 创建一个随机数组,…

Jmeter常用线程组设置策略

一、前言 ​ 在JMeter压力测试中,我们时常见到的几个场景有:单场景基准测试、单场景并发测试、单场景容量测试、混合场景容量测试、混合场景并发测试以及混合场景稳定性测试 在本篇文章中,我们会用到一些插件,在这边先给大家列出&…

wazuh配置和案例复现

wazuh配置 安装wazuh有二种方法 第一种 在官网下载ova文件 打开VMware进行虚拟机安装 账号:wazuh-user 密码:wazuh 将网络设置为net模式 重启网卡 systemctl network restart查看ip ip add启动小皮 远程连接 默认账号和密码admin admin 第二种 yum安装根据官方文件的步骤…

flutter TARGET_SDK_VERSION和android 13

config.gradle ext{SDK_VERSION 33MIN_SDK_VERSION 23TARGET_SDK_VERSION 33COMPILE_SDK_VERSION SDK_VERSIONBUILD_TOOL_VERSION "33.0.0"//兼容库版本SUPPORT_LIB_VERSION "33.0.0"}app/build.gradle里面的 defaultConfig {// TODO: Specify your…

射频课堂:发送、接收机的结构和指标解析

来源:浙江科技学院《高频电子线路》 链接:射频课堂:发送、接收机的结构和指标解析 - RFASK射频问问 关于RFASK射频问问 射频问问是在"微波射频网”系列原创技术专栏基础上升级打造的技术问答学习平台,主要围绕射频芯片、微…

6个小白也能看得懂的华为交换机命令,你学会了吗?

前言 基础配置命令 1、用户模式 登陆设备后,直接进入用户模式,尖括号表示用户模式,在这个模式下只能执行少量查看配置的命令; 2、视图模式 用户模式下,输入system-view或者sys进入视图模式,方括号表示…

Python数据分析实战-找出两个列表中的不同元素(附源码和实现效果)

实现功能 使用 Python 的集合操作来实现找出两个列表中的不同元素。将两个列表转化为集合类型,然后使用集合的操作来找出不同的元素。 实现代码 list1 [1, 2, 3, 4, 5] list2 [3, 4, 5, 6, 7]set1 set(list1) set2 set(list2)diff set1.symmetric_difference…

【sql】MongoDB 增删改查 高级用法

【sql】MongoDB 增删改查 高级用法 https://www.mongodb.com/docs/manual/reference/sql-comparison //增 //新增数据2种方式 db.msg.save({"name":"springboot😀"}); db.msg.insert({"name":"mango good"}); db.msg.save…

私域型电商引流方案:排队领奖模式实现精准定位、快速裂变

随着电商行业的不断发展,传统电商平台正面临着越来越严峻的挑战,在流量红利消退以及市场竞争加剧的大环境下,如何提升消费者活跃度以及留存率成为了各大电商平台急需解决的问题。因此,在众多电商平台中脱颖而出的排队领奖模式应运…

数显角度尺芯片/pcba方案

数显角度尺是一种用于测量角度的仪器,它可以自动读取被测角度并将结果显示在液晶屏幕上。数显角度尺的主要工作原理是通过使用旋转编码器和微处理器来测量和处理角度值。 一、功能概述 LCD液晶数字显示 相对垂直度测量 数显角度测量 HOLD保持功能 低电提示功能 自动…