(7)深度学习学习笔记-卷积层

news2024/9/20 10:37:16

文章目录

  • 前言
  • 一、实现二维互相关和卷积层
  • 二、用nn的Conv2d给定输入X和输出Y,生成核K
    • 1.引入库
    • 2.简单实现
  • 来源


前言

在卷积层中,输入张量和核张量通过互相关运算产生输出张量。
在这里插入图片描述
在这里插入图片描述
阴影部分是第一个输出元素,以及用于计算输出的输入张量元素和核张量元素。
在这里插入图片描述
不同的核可以得到不同的输出。
在这里插入图片描述
实际上应该是交叉相关。
在这里插入图片描述


一、实现二维互相关和卷积层

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


def corr2d(X, K):  # X输入 K核矩阵
    """计算二维互相关运算"""
    h, w = K.shape  # 核矩阵行数和列数
    Y = torch.zeros((X.shape[0] - h + 1, X.shape[1] - w + 1)) # Y输出矩阵
    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

# 验证corr2d
# 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]])
# print(corr2d(X, K))

# 卷积层(最简单的输入输出通道都为1)
# 卷积层对输入和卷积核权重进行互相关运算,并在添加标量偏置之后产生输出。
class Conv2D(nn.Module):
    def __init__(self, kernel_size):
        super().__init__()
        self.weight = nn.Parameter(torch.rand(kernel_size)) # 初始化一个和核矩阵大小相同的权重
        self.bias = nn.Parameter(torch.zeros(1))

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

# 卷积层的一个简单应用:通过找到像素变化的位置,来检测图像中不同颜色的边缘
# 构造一个6*8像素的黑白图像。中间四列为黑色0 其余像素为白色1
X = torch.ones((6, 8))
X[:, 2:6] = 0
# 构造一个高度为1宽度为2的卷积核K。当进行互相关运算时,如果水平相邻的两元素相同,则输出为零,否则输出为非零。
K = torch.tensor([[1.0, -1.0]])  # 只能检测垂直的边缘(因为是1*2的矩阵
# 对参数X(输入)和K(卷积核)执行互相关运算。输出Y中的1代表从白色到黑色的边缘,-1代表从黑色到白色的边缘,其他情况的输出为0
Y = corr2d(X, K)

二、用nn的Conv2d给定输入X和输出Y,生成核K

1.引入库

import torch
from torch import nn

2.简单实现

# 给定输入X和输出Y,生成K
# 构造一个二维卷积层,它具有1个输出通道和形状为(12)的卷积核
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): # 10次epoch
    Y_hat = conv2d(X)
    loss = (Y_hat - Y) ** 2
    conv2d.zero_grad()
    loss.sum().backward()
    # 迭代卷积核
    conv2d.weight.data[:] -= lr * conv2d.weight.grad # 梯度下降
    if (i + 1) % 2 == 0:
        print(f'epoch {i+1}, loss {loss.sum():.3f}')

print(conv2d.weight.data.reshape((1, 2)))

来源

b站 跟李沐学AI 动手学深度学习v2 19

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

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

相关文章

【直播预告】HarmonyOS极客松赋能直播第四期:HarmonyOS开发经验分享

直播预约通道:【直播预告】HarmonyOS极客松赋能直播第四期:HarmonyOS开发经验分享

【数据库】使用DBever连接人大金仓数据库

下载安装DBever 首先需要下载并安装DBever,可以在DBever官网上下载最新版的安装程序,根据提示进行安装即可。 下载驱动程序 首先需要从人大金仓官方网站下载适用于DBever的驱动程序。下载完成后,将驱动程序保存到本地计算机上。 添加驱动…

docker deploy rancher

docker run --privileged -d --name rancher --restartunless-stopped -p 80:80 -p 443:443 rancher/rancher:latest docker ps docker logs 4d890c673011 2>&1 | grep “Bootstrap Password:”

LCD屏幕显示文字(含交叉编译freetype字体矢量库)

文章目录 字符的编码方式编码与字体ASCIIANSIUNICODEUNICODE 编码实现 ASCII 字符的点阵显示ASCII字符文件主要代码 中文字符的点阵显示指定编码格式汉字的点阵数据(汉字区位码) 交叉编译 freetype 矢量库程序运行的一些基础知识怎么确定“系统目录”&am…

【08】STM32·HAL库开发-HAL库介绍 | STM32Cube固件库介绍 | HAL库框架结构 | 如何使用HAL库及使用注意事项

目录 1.初识HAL库(了解)1.1CMSIS简介1.2HAL库简介 2.STM32Cube固件包浅析(了解)2.1如何获取STM32Cube固件包?2.2STM32Cube固件包文件夹简介2.3CMSIS文件夹关键文件2.3.1CMSIS标准规定软件包目录2.3.2Device和Include文…

背光图像增强论文调研

背光图像增强 M. Akai, Y. Ueda, T. Koga and N. Suetake, “A Single Backlit Image Enhancement Method For Improvement Of Visibility Of Dark Part,” 2021 IEEE International Conference on Image Processing (ICIP), Anchorage, AK, USA, 2021, pp. 1659-1663, doi: 10…

山西电力市场日前价格预测【2023-07-05】

日前价格预测 预测明日(2023-07-05)山西电力市场全天平均日前电价为168.88元/MWh。其中,最高日前电价为334.22元/MWh,预计出现在20: 30。最低日前电价为0.00元/MWh,预计出现在09: 45-17: 15。 以上预测仅供学习参考&a…

【Git】中文显示数字的问题的解决方案

目录 问题截图解决方案 问题截图 运行git status命令,会出现图片中不正常显示中文的问题 解决方案 设置终端: 右键窗口头部 -> Options...执行命令: git config --global core.quotepath false

电脑屏幕监控软件是什么?有哪些功能?

电脑屏幕监控软件是一种用于监视和记录电脑屏幕活动的工具。它可以捕捉屏幕上的所有操作,包括键盘输入、鼠标点击、应用程序使用等。这些软件通常被用于家庭、教育机构和企业等环境中,以确保电脑的安全和监督员工或孩子的活动。 为什么需要电脑屏幕监控软…

STM32实战项目—密码锁

该项目的完整工程可以在博主的资源里找到,仅供参考。 文章目录 一、任务要求二、实现方法2.1 输入密码判断2.2 管理员模式2.3 修改密码 三、程序设计3.1 输入密码判断3.2 进入管理员模式3.3 修改密码 四、问题总结4.1 输入内容一直提示Error4.2 密码判断一直错误 五…

Lua,不使用模块,解压文件

本来lua遍历文件夹下压缩包内容、路径可以通过加载模块: require(“lfs”) 和 require(“zip”) 来解决。 但是本人通过c调用lua时,只要lua脚本中使用require加载模块,就会出错。 因此为了能够让c通过lua,解压当前路径下压缩包&a…

【基础算法】回溯算法相关题目

系列综述: 💞目的:本系列是个人整理为了秋招算法的,整理期间苛求每个知识点,平衡理解简易度与深入程度。 🥰来源:材料主要源于代码随想录进行的,每个算法代码参考leetcode高赞回答和…

Android RecyclerView AsyncListUtil手动刷新fillData,kotlin

Android RecyclerView AsyncListUtil手动刷新fillData,kotlin implementation com.github.bumptech.glide:glide:4.15.1implementation androidx.constraintlayout:constraintlayout:1.1.3 import android.os.Bundle import android.util.Log import android.view.V…

百万连接实现02:使用epoll实现的服务器

使用的操作系统: t$ cat /proc/version Linux version 4.19.260 (lkmaoubuntu) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.12)) #1 SMP Thu Sep 29 14:19:07 CST 2022 文件句柄的限制 如果不修改连接测试,会报错 一个tcp连接就需要…

北京大学2015计算机学科夏令营上机考试

目录 A:整数的个数 B:过滤多余的空格 C:二维数组右上左下遍历 D 合影效果 E:Simple prefix compression【做不起】 F:To Europe! To Europe!【做不起】 G:The Game【做不起】 H:Falling Leaves A:整数的个数 #include<iostream> using namespace std; int main(…

VSCode 免安装及中文设置

前言&#xff1a;VSCode作为目前最强大的文本编辑器&#xff0c;通过内部的插件市场可满足各种开发需求。使用免安装版可以自定义插件安装位置等&#xff0c;而使用安装包安装只能通过修改快捷方式自定义&#xff0c;十分不方便。因此这里分享如何安装免安装版的VSCode。 下载…

ETL是什么?怎样更快的学习ETL?

ETL是英文Extract-Transform-Load的缩写&#xff0c;用来描述将数据从源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程&#xff0c;它能够对各种分布的、异构的源数据(如关系数据)进行抽取&#xff0c;按照预先设计的规则将不完整数据、重复数据以及错误数据…

滤波后点云的个数和之前相同,只是有的点云坐标是nan

进行点云的条件滤波&#xff0c;滤波前后点云的个数不变&#xff0c;只是被滤掉的点坐标显示为nan。代码片段如下&#xff1a; pcl::ConditionAnd<pcl::PointXYZ>::Ptr range_cond(new pcl::ConditionAnd<pcl::PointXYZ>()); range_cond->addComparison(pcl::Fi…

李宏毅transformer讲解;B站内测“搜索AI助手”功能

&#x1f989; AI新闻 &#x1f680; B站内测“搜索AI助手”功能 摘要&#xff1a;据反馈&#xff0c;B站正在内测“搜索 AI 助手”功能。用户在搜索框内输入问句或在搜索词中添加“?”即可体验此新功能。截图显示&#xff0c;该功能会为用户的搜索提供一个生成的答案&#…

hcip作业二

实验要求&#xff1a; 要求&#xff1a;R1-R2-R3-R4-R5 RIP 100运行版本2&#xff1b;R6-R7 RIP 200 运行版本1 1.使用合理IP地址规划网络&#xff0c;各自创建环回接口 2.R1创建环回 172.16.1.1/24 172.16.2.1/24 172.16.3.1/24 3.要求R3使用R2访问R1环回 4.减少路由条目数量&…