2.1.卷积层

卷积

​ 用MLP处理图片的问题:假设一张图片有12M像素,那么RGB图片就有36M元素,使用大小为100的单隐藏层,模型有3.6B元素,这个数量非常大。

识别模式的两个原则:

  1. 平移不变性(translation invariance):不管检测对象出现在图像中的哪个位置,神经网络的前面几层应该对相同的图像区域具有相似的反应,即为“平移不变性”。
  2. 局部性(locality):神经网络的前面几层应该只探索输入图像中的局部区域,而不过度在意图像中相隔较远区域的关系,这就是“局部性”原则。最终,可以聚合这些局部特征,以在整个图像级别进行预测。

从全连接层到卷积

​ 需要将输入和输出变形为矩阵(宽度,高度),因为现在处理的信息含有空间上的信息

​ 将权重变形为四维张量,从(h,w)到(h’,w’),记录输入图的横纵坐标,对输出图的横纵坐标的影响。
h i , j = b i , j + ∑ k ∑ l w i , j , k , l x k , l = b i , j + ∑ a ∑ b v i , j , a , b x i + a , i + b v 是 w 的重新索引 v i , j , a , b = w i , j , i + a , j + b h_{i,j} = b_{i,j}+\sum_{k}\sum_{l}w_{i,j,k,l}x_{k,l}=b_{i,j}+\sum_{a}\sum_bv_{i,j,a,b}x_{i+a,i+b}\\ v是w的重新索引 v_{i,j,a,b} = w_{i,j,i+a,j+b} hi,j=bi,j+klwi,j,k,lxk,l=bi,j+abvi,j,a,bxi+a,i+bvw的重新索引vi,j,a,b=wi,j,i+a,j+b
​ 索引 a a a b b b通过在正偏移和负偏移之间移动覆盖了整个图像。对于隐藏表示中任意给定位置 ( i , j ) (i,j) (i,j)处的像素值 h i , j h_{i,j} hi,j,可以通过 x x x中以 ( i , j ) (i,j) (i,j)为中心对像素进行加权求和得到,加权使用的权重为 v i , j , a , b v_{i,j,a,b} vi,j,a,b

平移不变性

x x x的平移导致 h h h的平移 h i , j = b i , j + ∑ a ∑ b v i , j , a , b x i + a , i + b h_{i,j}=b_{i,j}+\sum_{a}\sum_bv_{i,j,a,b}x_{i+a,i+b} hi,j=bi,j+abvi,j,a,bxi+a,i+b, v v v应该不依赖于 i , j i,j i,j,它是整张图的权重,则我们可以让 v i , j , a , b = v a , b v_{i,j,a,b}=v_{a,b} vi,j,a,b=va,b,则
h i , j = b i , j + ∑ a ∑ b v a , b x i + a , i + b h_{i,j} =b_{i,j}+\sum_{a}\sum_bv_{a,b}x_{i+a,i+b} hi,j=bi,j+abva,bxi+a,i+b
​ 这就是2维卷积,数学上叫做2维交叉相关

​ 这样的简化让权重矩阵简化了不少

局部性

h i , j = b i , j + ∑ a ∑ b v a , b x i + a , i + b h_{i,j} =b_{i,j}+\sum_{a}\sum_bv_{a,b}x_{i+a,i+b} hi,j=bi,j+abva,bxi+a,i+b

​ 在评估 h i , j h_{i,j} hi,j时,我们不应该用远离 x i , j x_{i,j} xi,j的参数,那么,可以只取一个小范围:

​ 当 ∣ a ∣ , ∣ b ∣ > Δ |a|,|b|>\Delta a,b>Δ时,使得 v a , b = 0 v_{a,b}=0 va,b=0
h i , j = b i , j + ∑ a = − Δ Δ ∑ b = − Δ Δ v a , b x i + a , j + b h_{i,j}= b_{i,j}+\sum^\Delta_{a=-\Delta}\sum^\Delta_{b=-\Delta} v_{a,b}x_{i+a,j+b} hi,j=bi,j+a=ΔΔb=ΔΔva,bxi+a,j+b
对全连接层使用平移不变性和局部性得到了卷积层
h i , j = b i , j + ∑ a ∑ b v i , j , a , b x i + a , i + b ⟹ h i , j = b i , j + ∑ a = − Δ Δ ∑ b = − Δ Δ v a , b x i + a , j + b h_{i,j} =b_{i,j}+\sum_{a}\sum_bv_{i,j,a,b}x_{i+a,i+b} \Longrightarrow h_{i,j}= b_{i,j}+\sum^\Delta_{a=-\Delta}\sum^\Delta_{b=-\Delta} v_{a,b}x_{i+a,j+b} hi,j=bi,j+abvi,j,a,bxi+a,i+bhi,j=bi,j+a=ΔΔb=ΔΔva,bxi+a,j+b

卷积层

二维交叉相关

在这里插入图片描述

​ 对应数字相乘再相加。

二维卷积层

在这里插入图片描述

输入 X : n h × n w X:n_h \times n_w X:nh×nw

W : k h × k w W:k_h \times k _w W:kh×kw

偏差 b ∈ R b\in \R bR

输出 Y : ( n h − k h + 1 ) × ( n w − k w + 1 ) Y:(n_h-k_h+1)\times (n_w-k_w+1) Y:(nhkh+1)×(nwkw+1) (卷积核横向和纵向滑动的次数)
Y = X ⋅ W + b Y =X\cdot W +b Y=XW+b
W W W b b b是可学习的参数

在这里插入图片描述

边缘检测:中间大,周围是负数

由于对称性,交叉相关和卷积在实际使用中没有区别

一维和三维交叉相关

1.一维

y i = ∑ a = 1 h w a x i + 1 y_i = \sum^h_{a=1} w_ax_{i+1} yi=a=1hwaxi+1

​ 文本,语言,时序序列

2.三维


y i , j , k = ∑ a = 1 h ∑ b = 1 w ∑ c = 1 d w a , b , c x i + a , j + b , k + c y_{i,j,k} = \sum ^h _{a=1}\sum^w_{b=1} \sum^d_{c=1} w_{a,b,c} x_{i+a,j+b,k+c} yi,j,k=a=1hb=1wc=1dwa,b,cxi+a,j+b,k+c
​ 视频,医学图像,气象地图

​ 卷积层将输入和核矩阵进行交叉相关,加上偏移后得到输出,核矩阵和偏移是可学习的参数,核矩阵的大小是超参数。

代码实现

import torch
from torch import nn
from d2l import torch as d2ldef corr2d(X, K):  # X是输入矩阵,K是核矩阵 2D卷积"""计算二维互相关运算"""h, w = K.shapeY = 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 YX = 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]])
Y = corr2d(X, K)
print(Y)'''卷积层,卷积层在进行互相关运算后,加上偏置产生输出,那么卷积层被训练的参数是卷积核权重和标量偏置'''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  # 前向传播函数调用corr2d并进行偏置'''将带有h×w卷积核的卷积层称为h×w卷积层'''# 检测图像中不同颜色的边缘
X = torch.ones((6, 8))
X[:, 2:6] = 0
print(X)
# 如果元素相同,则输出为0,不同则非0
k = torch.tensor([[1.0, -1.0]])
Y = corr2d(X, k)
print('边缘检测结果:\n', Y)# 这个K只能检测垂直边缘,将X转置后:
Z = corr2d(X.t(), k)
print('垂直边缘检测结果:\n', Z)'''学习卷积核'''# 构造一个二维卷积层,它具有1个输出通道和形状为(1,2)的卷积核
conv2d = nn.Conv2d(1, 1, kernel_size=(1, 2), bias=False)# 这个二维卷积层使用四维输入和输出格式(批量大小、通道、高度、宽度),
# 其中批量大小和通道数都为1X = 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.gradif (i + 1) % 2 == 0:print(f'epoch {i + 1}, loss {l.sum():.3f}')print("训练结果:", conv2d.weight.data.reshape((1, 2)))

个人理解

​ 卷积的动机是为了减少训练的参数,模式识别的特点(平移不变性,局部性)也保证了这样是合理的。

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

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

相关文章

K8S 部署jaeger-operator,与其演示项目hotrod

最近在研究observabilty在K8S环境的onboard,查阅了一些资料,发现现在网上Prometheus/Metrics相关的资源,是比较全面的,而Trace相关的部分不是很全面,所以写下这篇博文,以做备忘和分享。 组件介绍 我这里选…

Excel的操作

Excel的操作 一、Excel的作用 Excel是一款功能强大的电子表格软件,主要用于数据处理和分析。 二、Excel的基础操作 新建文档 一般情况下,就在桌面空白处,点击鼠标右键,即可新建 三、页面布局 1、快速访问工具栏 主要包含&am…

为 android编译 luajit库、 交叉编译

时间:20200719 本机环境:iMac2017 macOS11.4 参考: 官方的文档:Use the NDK with other build systems 写在前边:交叉编译跟普通编译类似,无非是利用特殊的编译器、链接器生成动态或静态库; make 本质上是按照 Make…

ssm 学习 ---(spring)

一、spring框架 1、基本框架 2、Beanfactory快速入门 配置清单:xml文件 (1) 导入jar包或者maven坐标 (2) 定义UserService接口以及UserService实现类 (3) 创建bean.xml配置文件,将UserService信息配置到该xml文件中; (4)编写测试代码,创…

ubuntu lxqt触摸屏旋转校准(usb触摸屏、lxqt、ubuntu23.10)

参考文章:https://www.codetd.com/article/5651388 1.查看触摸屏驱动 rootxyy:~# xinput list ⎡ Virtual core pointer id2 [master pointer (3)] ⎜ ↳ Virtual core XTEST pointer id4 [slave pointer (2)…

JVM 在什么情况下会触发垃圾回收?

垃圾回收在JVM中自动进行,通常在以下几种情况下触发: 1. 年轻代满了(Young Generation Full) 当年轻代的Eden区满了时,会触发Minor GC(也称为Young GC)。这是因为新创建的对象首先分配在Eden区…

【音视频】AAC编码器与ffmpeg生成AAC数据

文章目录 前言为什么使用AAC?AAC规格常见的AAC规格规格之间的区别 ffmpeg生成AAC数据 总结 前言 在音频压缩技术不断发展的过程中,AAC(Advanced Audio Coding)编码器因其出色的音质和压缩效率,逐渐成为数字音频领域的…

牛客周赛51:小红走矩阵(二分+bfs)

链接:登录—专业IT笔试面试备考平台_牛客网 来源:牛客网 题目描述 给定nnn \times nnn的矩阵,矩阵中的每个元素都是正整数,小红能当前位于左上角(1,1)(1,1)(1,1),每次可以从 (x,y)(x, y)(x,y) 走到 (x1,y)(x1, y)(…

为了实现接口缓存,专门写了个缓存库 f-cache-memory

问题起因 起因是某次发版之后,服务器接口压力过大,当场宕机,排查之后发现有个接口在首页被调十来次(六七年的老项目了,都是泪呀),后端反馈这个接口的sql很复杂,很耗性能&#xff0c…

如何根据同一行的ID利用R语言对值进行求和

需求:将属于同一分组的对应的值进行求和或者求平均值 #设置工作目录 > getwd() [1] "C:/Users/86150/Documents" > setwd("C:/Users/86150/Desktop/AA2024/RUF") > list.files() #读取文件 >install.packages("readxl")…

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS

基于NeRF的路面重建算法——RoME / EMIE-MAP / RoGS 1. RoMe1.1 Mesh Initialization / Waypoint Sampling1.2 Optimization1.3 Experiments 2. EMIE-MAP2.1 Road Surface Representation based on Explicit mesh and Implicit Encoding2.2 Optimizing Strategies2.3 Experimen…

python报错RuntimeError: Numpy is not available

–> 141 audio torch.from_numpy(audio) 143 if device is not None: 144 audio audio.to(device) RuntimeError: Numpy is not available 使用python3.9和torch时,自动安装了Numpy2.0,一直报错, 解决方法:pip install nump…

如何在 Linux 中解压 ZIP 文件

ZIP 是一种常用的压缩文件格式,用于存储和传输多个文件。在 Linux 系统中,解压 ZIP 文件非常简单。 使用 unzip 命令 unzip 是一个专用于解压 ZIP 文件的命令行工具。要使用它,请打开终端并输入以下命令: 例如,要解…

SpringBoot整合ElasticSearch的elasticsearch-java出现jakarta.json.spi.JsonProvider报错问题

一、原因 报错内容如下 org.springframework.beans.factory.BeanCreationException: Error creating bean with name esClient defined in class path resource [com/elasticsearch/config/ElasticSearchConfig.class]: Bean instantiation via factory method failed; nes…

springboot怎么使用rides 缓存方法的返回值 完整例子

好的,下面是一个使用Spring Boot和Redis缓存方法返回值的完整示例: 添加依赖:在pom.xml中添加Spring Boot Redis依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId> <…

在 CI/CD Pipeline 中实施持续测试的最佳实践!

随着软件开发周期的不断加快&#xff0c;持续集成&#xff08;CI&#xff09;和持续交付/部署&#xff08;CD&#xff09;已经成为现代软件开发的重要组成部分。在这一过程中&#xff0c;持续测试的实施对于确保代码质量、提高发布效率至关重要。本文将详细介绍在CI/CD流水线中…

JVM:JavaAgent技术

文章目录 一、Java工具的介绍二、Java Agent技术1、介绍2、静态加载模式3、动态加载模式 三、搭建java agent静态加载模式环境1、创建maven项目2、编写类和premain方法3、编写MANIFEST.MF文件4、使用maven-assembly-plugin进行打包5、创建Spring Boot应用 一、Java工具的介绍 …

有关css的题目

css样式来源有哪些&#xff1f; 内联样式&#xff1a; <a style"color: red"> </a> 内部样式&#xff1a;<style></style> 外部样式&#xff1a;写在独立的 .css文件中的 浏览器的默认样式 display有哪些属性 none - 不展示 block - 块类型…

基于深度学习的医疗数据分析

基于深度学习的医疗数据分析是将深度学习技术应用于医疗数据处理和分析&#xff0c;以提高疾病诊断、治疗规划、患者监护等方面的效率和准确性。这一领域涵盖了广泛的应用&#xff0c;包括影像分析、电子健康记录&#xff08;EHR&#xff09;处理、基因组数据分析等。以下是对这…

mac数据恢复软件哪个好用 macbook数据恢复专业软件下载 mac数据恢复概率大吗 苹果电脑数据恢复软件哪个好

作为办公的必需品&#xff0c;mac的普及率虽然比不上其他品牌的windows操作系统&#xff0c;但是使用人群也一致居高不下&#xff0c;因此&#xff0c;mac数据丢失的问题也时常发生。当数据丢失以后&#xff0c;如何找回数据成了一大难题。 一、Mac数据恢复概率大吗 一般情况下…