动手学深度学习——卷积操作

news/2024/10/8 23:00:56

卷积

卷积概念

  • 卷积原属于信号处理中的一种运算,引入CNN中,作为从输入中提取特征的基本操作
  • 补零:在输入端外侧填补0值使得卷积输出结果满足某种大小,在外侧的每一边都添加0值,使得输出可以达到某种预定形状
  • 跨步:卷积核在输入上滑动时每次移动到下一步的距离
    img

使用张量实现卷积

import torch
a = torch.arange(16).view(4,4)
a
tensor([[ 0,  1,  2,  3],[ 4,  5,  6,  7],[ 8,  9, 10, 11],[12, 13, 14, 15]])
b = a.unfold(0,3,1) #按照第0维度,以每3个元素,跨度为1进行展开
b
tensor([[[ 0,  4,  8],[ 1,  5,  9],[ 2,  6, 10],[ 3,  7, 11]],[[ 4,  8, 12],[ 5,  9, 13],[ 6, 10, 14],[ 7, 11, 15]]])

torch.tensor.unfold可以按照指定的维度,以一定的间隔对原始张量进行分片,然后返回重整后的张量。

c = b.unfold(1,3,1)
c
tensor([[[[ 0,  1,  2],[ 4,  5,  6],[ 8,  9, 10]],[[ 1,  2,  3],[ 5,  6,  7],[ 9, 10, 11]]],[[[ 4,  5,  6],[ 8,  9, 10],[12, 13, 14]],[[ 5,  6,  7],[ 9, 10, 11],[13, 14, 15]]]])
c.shape
torch.Size([2, 2, 3, 3])

上述张量c已经实现了按照3*3滑动窗大小,跨步为1将张量a展开为4为张量。

带补零和跨步设置的4维卷积层操作:

import torch
def conv2d(x,weight,bias,stride,pad):n,c,h_in,w_in = x.shaped,c,k,j = weight.shapex_pad = torch.zeros(n,c,h_in+2*pad,w_in+2*pad).to(x.device)x_pad[:,:,pad:-pad,pad:-pad] = x #对输入进行补零操作x_pad = x_pad.unfold(2,k,stride)x_pad = x_pad.unfold(3,j,stride) #按照滑动窗展开out = torch.einsum('nchwkj,dckj->ndhw',x_pad,weight)#按照滑动窗相乘,并将所有输入通道上卷积结果累加out = out + bias.view(1,-1,1,1) #添加偏置return out
import torch.nn.functional as F
x = torch.randn(2,3,5,5,requires_grad=True)
w = torch.randn(4,3,3,3,requires_grad=True)
b = torch.randn(4,requires_grad=True)
stride = 2
pad = 2
torch_out = F.conv2d(x,w,b,stride,pad)
my_out = conv2d(x,w,b,stride,pad)
torch_out
my_out
tensor([[[[ 0.7389,  2.6153,  1.6206,  0.7432],[ 3.3159, -1.5308,  9.9275, -1.2443],[ 3.0869, -6.5276,  5.8508, -2.7660],[-1.9878, -6.0596, -0.6992, -3.3871]],[[-0.5907,  1.0378, -2.1682, -1.2919],[-0.5426, -0.7781,  4.4606,  2.6235],[-4.9208,  2.5762, -0.1033, -2.2686],[ 0.8438, -2.4514,  2.3441, -1.5637]],[[ 1.6342,  1.5391,  4.0431,  4.2984],[-1.9671,  1.6227, -3.0477,  1.4082],[ 2.1579,  0.1513,  0.3556, -1.5150],[ 1.8514,  2.6099,  3.6082,  0.9121]],[[ 0.3274, -0.2762,  0.1335,  0.9362],[ 1.9674, -9.8901,  4.4833, -4.0852],[-4.3262,  0.1775, -0.3596,  1.7832],[ 3.7039, -2.4898,  5.7371, -1.6463]]],[[[-0.6281,  2.5599, -1.1673, -0.2803],[ 0.3624, -3.0622,  0.9032, -2.2624],[ 5.2199, 10.0974, -6.2536,  3.3783],[ 0.7550,  6.5702,  1.6907,  0.4545]],
...[[ 0.3033, -4.3135,  3.3039, -0.7272],[ 5.8496, -4.2414, -9.7936, -3.2630],[-5.2852, -5.4366,  8.8947, -1.0325],[-0.5529,  2.5634, -3.4046,  0.8185]]]], grad_fn=<AddBackward0>)

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

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

相关文章

MyBatis-Plus 分页查询配置

说明一下 ,使用MyBatis-Plus 进行分页查询时 ,要先进行配置添加配置 /*** @Author North* @Date 2024/5/6*/ @Configuration public class MPConfig {@Beanpublic MybatisPlusInterceptor mybatisPlusInterceptor() {MybatisPlusInterceptor mybatisPlusInterceptor = new My…

VS打包项目成.exe.msi

VS打包项目成.exe&.msi ref:https://blog.csdn.net/weixin_44790046/article/details/103016154准备工作VS 2022(VS2017无法安装Installer Projects扩展,未知原因) Installer Projects (扩展 > 管理扩展 > 联机 > 搜索 > Microsoft Visual Studio Installe…

Spring学习之——Bean加载流程

Spring IOC容器就像是一个生产产品的流水线上的机器,Spring创建出来的Bean就好像是流水线的终点生产出来的一个个精美绝伦的产品。既然是机器,总要先启动,Spring也不例外。因此Bean的加载流程总体上来说可以分为两个阶段:容器启动阶段 Bean创建阶段一、容器启动阶段: 容器…

阿里实习生:面试阿里其实并没有那么难。

Go语言中的数据结构并发安全特性、单例模式实现及sync.map底层原理解析。分享一位同学在阿里的Go后端实习面经详解, 希望对你有帮助。愉快的五一假期已经结束了, 又要投入到学习和工作当中了。 今天分享一位同学在阿里的Go后端实习面经详解, 希望对你有帮助。Go里有哪些数据结构…

Mac 安装 RabbitMQ

一般来说,安装分为两种方式:通过 brew 命令安装。在这里,推荐使用 brew 来安装,非常强大的 Mac 端包管理工具。 下载 RabbitMQ 源文件,解压源文件之后进行安装。 Docker启动一、brew 命令安装Mac安装 RabbitMQ 1、安装 erlang brew install erlang2、安装 rabbitmq brew i…

Deepin-Docker-Memcached

目标:基于deepin+docker安装 memchaed 1.镜像下载 docker pull memcached:latest 2.容器启动 docker run -d -p 11211:11211 --name memcached-test memcached:latest 3.启动检查4.启动Ok

多区域协作时 如何实现便捷可控的文件跨域传输?

文件跨域传输的场景在现代企业运营中非常普遍,特别是在那些具有分布式结构或需要跨地域合作的组织中。 以下是一些典型的多区域文件传输场景: 1、企业内部跨地域传输:大型企业或跨国公司在不同地区设有分支机构,需要在这些分支机构之间传输业务数据和公司文件。 2、供应链…

安全数据交换系统哪个好?该如何选型?

安全数据交换系统是用于在不同网络或组织之间安全、高效地传输和共享数据的解决方案。安全数据交换系统对于任何需要处理敏感数据、确保数据安全、并满足合规要求的组织来说都是至关重要的。 这种系统通常用于以下目的: 1)数据传输:允许用户在不同的地理位置或网络环境之间…