当前位置: 首页 > news >正文

pytorch卷积层权重之 二维互相关运算(corr2d) (亲测,已解决)

卷积神经网络(Convolutional Neural Network,简称CNN)是一种深度学习模型,广泛应用于图像识别、计算机视觉和模式识别等领域。它的设计灵感来自于生物学中视觉皮层的工作原理。卷积层、池化层和全连接层组成。
卷积层主要用于提取图像的局部特征,通过卷积操作和激活函数的处理,可以学习到图像的特征表示池化层则用于降低特征图的维度,减少参数数量,同时保留主要的特征信息。
全连接层则用于将提取到的特征映射到不同类别的概率上,进行分类或回归任务。
卷积神经网络在图像处理方面具有很强的优势,它能够自动学习到具有层次结构的特征表示,并且对平移、缩放和旋转等图像变换具有一定的不变性。这些特点使得卷积神经网络成为图像分类、目标检测、语义分割等任务的首选模型。除了图像处理,卷积神经网络也可以应用于其他领域,如自然语言处理和时间序列分析。通过将文本或时间序列数据转换成二维形式,可以利用卷积神经网络进行相关任务的处理。

torch.nn:PyTorch中的神经网络模块,提供了各种神经网络层和函数,

torch.nn.functional:PyTorch中的函数形式的神经网络层,如激活函数和损失函数等

二维互相关运算(corr2d)

如前文所示,在计算卷积的过程中,需要进行卷积核翻转,在具体实现上,一般会以互相关操作来代替卷积从而会减少一些不必要的操作或开销。
翻转指从两个维度(从 上到下、从左到右)颠倒次序,即旋转180度。
互相关和卷积的区别仅仅在于卷积核是否进行翻转,因此互相关也可以称为不翻转卷积
在神经网络中使用卷积是为了进行特征抽取,卷积核是否进行翻转和其特征抽取的能力无关。特别是当卷积核是可学习的参数时,卷积和互相关在能力上是等价的,因此,为了实现上(或描述上)的方便起见,我们用互相关来代替卷积,事实上,很多深度学习工具中卷积操作其实都是互相关操作。

def corr2d(X, K):#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[0]):Y[i, j] = (X[i:i + h, j:j + w] * K).sum()return Y

2.二维卷积层类(Conv2D)

class Conv2D(nn.Module):def __init__(self, kernel_size,weight = None):super().__init__()if weight is not None:self.weight = weightelse: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

a._init_(初始化)
接受一个 kemel size 参数作为卷积核的大小,并可选地接受一个 weight 参数作为卷积核的权重。如果没有提供 weignt 参数,则会随机生成一个与 kemnel size 相同形状的权重,并将其设置为可训练的参数nn.Parameter)。
定义了一个偏置项 bias ,也将其设置为可训练的参数。
b.forward(前向传播函数)
调用之前的 corr2d 函数,对输入 x和卷积核权重 self.weint 进行相关性计算,并将计算结果与偏置项self.bias 相加,作为前向传播的输出。

3.模型测试

#由于卷积层还未实现多通道,所以图像也默认是单通道
fake_image=torch.randn((5,5))
#实例化 卷积算子
conv=Conv2D(kernel_size=(3,3))
output = conv(fake_image)
print(output)

输出结果:

相关文章:

  • 神经网络学习-神经网络简介【Transformer、pytorch、Attention介绍与区别】
  • pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
  • 网页后端开发(基础1--maven)
  • 初探用uniapp写微信小程序遇到的问题及解决(vue3+ts)
  • 如何在 PyTorch 中自定义卷积核参数(亲测,已解决)
  • [免费]微信小程序问卷调查系统(SpringBoot后端+Vue管理端)【论文+源码+SQL脚本】
  • 设计模式-抽象工厂模式
  • C/Python/Go示例 | Socket Programing与RPC
  • 云原生时代的系统设计:架构转型的战略支点
  • GO语言---init函数
  • Go 语言底层(四) : 深入 Context 上下文
  • 鸿蒙 Stege模型 多模块应用
  • GO 基础语法和数据类型面试题及参考答案(下)
  • 解密鸿蒙系统的隐私护城河:从权限动态管控到生物数据加密的全链路防护
  • FreeRTOS任务基础知识
  • VLLM : RuntimeError: NCCL error: invalid usage
  • RT_Thread——线程管理(下)
  • 高端性能封装正在突破性能壁垒,其芯片集成技术助力人工智能革命。
  • window 显示驱动开发-如何查询视频处理功能(三)
  • 从零手写Java版本的LSM Tree (八):LSM Tree 主程序实现
  • 常州平台网站建设/seo优化搜索推广
  • 淘宝网站c#设计怎么做/百度惠生活怎么优化排名
  • 爱 做 网站/关键词名词解释
  • 台州做网站的公司/网站内部seo
  • java做的网站怎么设置关闭和开启网站访问不了怎么办/昆山网站建设
  • 做交友网站怎么赚钱/关键词推广是什么意思