首页 > 其他分享 >动手学深度学习——卷积操作

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

时间:2024-05-06 10:35:42浏览次数:22  
标签:10 stride 卷积 torch 动手 pad 深度 out

卷积

卷积概念

  • 卷积原属于信号处理中的一种运算,引入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.shape
    d,c,k,j = weight.shape
    x_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>)

标签:10,stride,卷积,torch,动手,pad,深度,out
From: https://www.cnblogs.com/Sun-Wind/p/18174419

相关文章

  • 动手学深度学习——基本张量运算
    基本张量运算张量张量可以被看做多维数组,高维矩阵,可以进行多种数据操作和数学运算importtorchtorch.tensor([[1.,-1.],[1.,-1.]])创建张量tensor([[1.,-1.],[1.,-1.]])a=torch.randn(2,3)torch.sigmoid(a)a处理张量tensor([[-0.1690,-0.2554,-0.4......
  • m基于Yolov2深度学习网络的螺丝检测系统matlab仿真,带GUI界面
    1.算法仿真效果matlab2022a仿真结果如下:         2.算法涉及理论知识概要        基于YOLOv2(YouOnlyLookOnceversion2)深度学习网络的螺丝检测系统,是一种高效的目标检测方法,它在计算机视觉领域被广泛应用,尤其适合于实时检测和定位图像中的......
  • 深度学习相关理论
    一、深度学习相关理论1.神经网络概述     2.卷积神经网络CNN ①卷积层——计算方法是大矩阵内部×小矩阵=较小矩阵,作用是特征提取  ②池化层——计算方法是大矩阵通过选取最大值或是平均值变成小矩阵,作用是降维、提高计算效率    3.激活函......
  • 《深度学习原理与Pytorch实战》(第二版)(二)
    第6章手写数字加法器——迁移学习迁移学习允许训练集和测试集的数据有不同的分布、目标、领域;而一般的监督学习要求训练集和测试集上的数据有相同的分布特性一个有意思的想法:大公司运用大数据训练大模型,再将这些模型迁移到小公司擅长的特定垂直领域中,这样就可以将泛化的大模......
  • 【YoloDeployCsharp】基于.NET Framework的YOLO深度学习模型部署测试平台
    1.项目介绍  基于.NETFramework4.8开发的深度学习模型部署测试平台,提供了YOLO框架的主流系列模型,包括YOLOv8~v9,以及其系列下的Det、Seg、Pose、Obb、Cls等应用场景,同时支持图像与视频检测。模型部署引擎使用的是OpenVINO™、TensorRT、ONNXruntime以及OpenCVDNN,支持CP......
  • 基于深度学习网络的鞋子种类识别matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      基于GoogLeNet深度学习网络的鞋子种类识别是一种利用深度卷积神经网络进行物体识别的方法,特别适用于大规模图像分类问题。GoogLeNet以其独特的Inception模块和高效的层级结构,在Imag......
  • BiTCN:基于卷积网络的多元时间序列预测
    在时间序列预测领域中,模型的体系结构通常依赖于多层感知器(MLP)或Transformer体系结构。基于mlp的模型,如N-HiTS,TiDE和TSMixer,可以在保持快速训练的同时获得非常好的预测性能。基于Transformer的模型,如PatchTST和ittransformer也取得了很好的性能,但需要更多的内存和时间来训练。......
  • 基于深度学习网络的十二生肖图像分类matlab仿真
    1.算法运行效果图预览  2.算法运行软件版本matlab2022a 3.算法理论概述      GoogLeNet主要由一系列的Inception模块堆叠而成,每个Inception模块包含多个并行的卷积层,以不同的窗口大小处理输入数据,然后将结果整合在一起。假设某一层的输入特征图表示为X∈ℝ^......
  • 《深度学习原理与Pytorch实战》(第二版)
    第1章深度学习简介深度学习——利用深度人工神经网络来进行自动分类、预测和学习的技术,深度学习=深度人工神经网络超过三层的神经网络都可以叫做深度神经网络人工神经网络的关键算法——反向传播算法深度网络架构,即整个网络体系的构建方式和拓扑连接结构,主要分为3种:......
  • 卷积核大小选择、网络层数问题
    CNN网络结构设计的观点:每一层卷积有多少filters,以及一共有多少层卷积,这些暂时没有理论支撑。一般都是靠感觉去设置几组候选值,然后通过实验挑选出其中的最佳值。每一层卷积的filters数和网络的总卷积层数,构成了一个巨大的超参集合。一来没有理论去求解这个超参集合里的最优,二来......