pytorch初学笔记(八):神经网络之卷积操作

news2025/1/10 17:06:25

 目录

一、卷积操作

 二、二维卷积操作

2.1 torch.nn.functional

 2.2 conv2d方法介绍

2.2.1 使用该方法需要引入的参数

2.2.2 常用参数

2.2.3 关于对input和weight的shape详解

 三、代码实战

3.1 练习要求 

3.2 tensor的reshape操作 

3.3 不同stride的对比  

3.4 不同padding的对比

3.5 完整代码


一、卷积操作

torch.nn — PyTorch 1.13 documentation

 

 

 二、二维卷积操作

2.1 torch.nn.functional

 代码中引入torch.nn.functional,起别名为F

import torch.nn.functional as F

 

 2.2 conv2d方法介绍

什么是二维卷积?

二维卷积nn.Conv2d用于图像数据,对宽度和高度都进行卷积 

 

2.2.1 使用该方法需要引入的参数

torch.nn.functional.conv2d(inputweightbias=Nonestride=1padding=0

dilation=1groups=1) → Tensor

 

 

2.2.2 常用参数

  • input:输入矩阵,为tensor型,
  • weight:卷积核 ,为tensor型
  • stride:步长,默认为1
  • padding:填充大小,默认为0

 


2.2.3 关于对input和weight的shape详解

方法中对input和weight要求的shape都需要是4维的。

1.  input的shape要求:      

  • minibatch:batch中的样例个数
  • in_channels:每个样例数据的通道数
  • iH:每个样例的高(行数)
  • iW:每个样例的宽(列数)

2.  weight的shape要求:

  • out_channels:卷积核的个数
  • in_channels/groups:每个卷积核的通道数
  • kH:每个卷积核的高(行数)
  • kW:每个卷积核的宽(列数)

(29条消息) 如何理解卷积神经网络中的通道(channel)_Medlen的博客-CSDN博客_卷积神经网络通道数

正常定义的tensor型shape均为二维,即只有长和宽,

因此需要使用reshape方法进行尺寸重定义。

 

 三、代码实战

3.1 练习要求 

代码将完成以下操作:

  1. 输入如下图所示的5*5矩阵
  2. 卷积核为下图所示的3*3矩阵
  3. 设置步长stride为1,使用conv2d方法进行卷积操作
  4. 输出结果 

3.2 tensor的reshape操作 

 输入的input大小为5*5,输入的kernel大小为3*3,均不符合conv2d方法中要求的shape大小,因此使用reshape方法进行tensor的尺寸重定义操作。

torch.reshape方法输入的第一个参数为需要改变大小的tensor,第二个参数为需要改变的大小,使用括号括起来的4个数字,前两个数字均为1,后两个数字为tensor的长和宽。

import torch
import torch.nn.functional as F
# 输入
input = torch.tensor([[1,2,0,3,1],
                      [0,1,2,3,1],
                      [1,2,1,0,0],
                      [5,2,3,1,1],
                      [2,1,0,1,1]])

# 卷积核
kernel = torch.tensor([[1,2,1],
                       [0,1,0],
                       [2,1,0]])

print(input.shape)
print(kernel.shape)

# 重新定义尺寸,把尺寸改成四个数,1个batchsize,1个通道,长和宽和之前一样
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))

print(input.shape)
print(kernel.shape)

输出: 

 可见两个tensor的大小都已经成功被改变,可以输入conv2d中进行下一步操作。 

output = F.conv2d(input,kernel)
print(output)

输出: 

 可见已成功进行卷积操作。

3.3 不同stride的对比  

 步长(stride):

卷积核是在图片上移动后遍历每一个像素,每次移动的大小就是步长stride

#stride=1或2时的输出
output1 = F.conv2d(input,kernel,stride=1)
print(output1)
output2 = F.conv2d(input,kernel,stride=2)
print(output2)

输出:

 

可以看到stride=1时输出的tensor大小为3*3,stride=2时为2*2。

 

3.4 不同padding的对比

padding(填充):

 习惯上,我们可以使用0来对图像进行填充。规定p( padding )代表填充的层数。

是为了满足输出的图像的维度要求,最终图像的输出宽度会=原来输出宽度+2padding,因为是周围填充

# padding=1或2时的
output3 = F.conv2d(input,kernel,stride=1,padding=1)
print(output3)
output4 = F.conv2d(input,kernel,stride=1,padding=2)
print(output4)

输出:

可以看到不同的padding输出的tensor大小不同。 

3.5 完整代码

import torch
#引入F
import torch.nn.functional as F

# 输入
input = torch.tensor([[1,2,0,3,1],
                      [0,1,2,3,1],
                      [1,2,1,0,0],
                      [5,2,3,1,1],
                      [2,1,0,1,1]])

# 卷积核
kernel = torch.tensor([[1,2,1],
                       [0,1,0],
                       [2,1,0]])

print(input.shape)
print(kernel.shape)

# 重新定义尺寸,把尺寸改成四个数,1个batchsize,1个通道,长和宽和之前一样
input = torch.reshape(input,(1,1,5,5))
kernel = torch.reshape(kernel,(1,1,3,3))

print(input.shape)
print(kernel.shape)

#stride=1或2时的输出
output1 = F.conv2d(input,kernel,stride=1)
print(output1)
output2 = F.conv2d(input,kernel,stride=2)
print(output2)

# padding=1或2时的
output3 = F.conv2d(input,kernel,stride=1,padding=1)
print(output3)
output4 = F.conv2d(input,kernel,stride=1,padding=2)
print(output4)

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

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

相关文章

Docker面试

1. Docker和虚拟机的区别? 虚拟机Virtual Machine与容器化技术(代表Docker)都是虚拟化技术,两者的区别在于虚拟化的程度不同。 隔离性 由于vm对操作系统也进行了虚拟化,隔离的更加彻底。而Docker共享宿主机的操作系统…

数字化转型总体需求

基于“两型三化九力”对企业数字化的要求,以建设产品全生命周期管理平台为手段和途径,打通设计、工艺、制造及交付服务的全生命周期的数字线,实现数字化设计、数字化仿真、数字化制造、数字化服务及数字化管理,未来以此为基础实现…

【计算机毕业设计】11.毕业生信息管理系统+vue

一、系统截图(需要演示视频可以私聊) 摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 毕业生信息招聘平台,主要的模块包括查看管理员;首页、个…

zk常用命令ls、ls2、get、stat,参数意思(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 1.连接zk客户端(进入zk后台) ./zkCli.sh 连接成功 使用help查看有哪些命令可以使用 试试ls和ls2的区别 ls显示指定路径下的目录 ls2不仅可以 显示指定路径下的目录,还可以显示该节点的相关状态信息…

OpenGL 单色

目录 一.OpenGL 单色图 1.IOS Object-C 版本1.Windows OpenGL ES 版本2.Windows OpenGL 版本 二.OpenGL 单色 GLSL Shader三.猜你喜欢 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >> OpenGL ES 基础 零基础 OpenGL ES 学习路线推荐 : OpenGL ES 学习目录 >…

非关系型数据库MongoDB是什么/SpringBoot如何使用或整合MongoDB

写在前面: 继续记录自己的SpringBoot学习之旅,这次是SpringBoot应用相关知识学习记录。若看不懂则建议先看前几篇博客,详细代码可在我的Gitee仓库SpringBoot克隆下载学习使用! 3.4.3.3 Mongodb 3.4.3.3.1 介绍 MongoDB是一个开…

【Tomcat专题】Tomcat如何打破双亲委派机制?

文章目录类加载器双亲委派机制双亲委派的好处Tomcat的类加载器loadClass总体加载步骤:类加载器 三种JDK内部的类加载器 启动类加载器(BootStrap ClassLoader) 负责加载JRE\lib下的rt.jar、resources.jar、charsets.jar包中的class。 扩展…

一文带你搞懂sklearn.metrics混淆矩阵

一般的二分类任务需要的评价指标有4个 accuracyprecisionrecallf1-score 四个指标的计算公式如下 计算这些指标要涉及到下面这四个概念,而它们又构成了混淆矩阵 TP (True Positive)FP (False Positive)TN (True Negative)FN (False Negative) 混淆矩阵实际值01预测…

周杰伦腾格尔晚上八点同时开线上演唱会,究竟是巧合还是刻意安排

从日历上面看,2022年11月19日,是一个再平凡不过的日子,不过有了周杰伦和腾格尔的加持,这个平凡的日子也变得不平凡了。根据腾格尔老师本人透露,他准备在11月19日,在某音平台开启线上演唱会,为歌…

智慧实验室解决方案-最新全套文件

智慧实验室解决方案-最新全套文件一、建设背景二、建设架构智慧实验室建设核心目标三、建设方案四、获取 - 智慧实验室全套最新解决方案合集一、建设背景 当前高校和中小学的智慧校园建设正如火如荼地进行中,智慧实验室建设属于“智慧校园”建设的重要组成部分之一…

ctf_BUUCTF_web(1)

文章目录BUUCTF_webSQL注入1. [极客大挑战 2019]EasySQL2. [SUCTF 2019]EasySQL3.[强网杯 2019]随便注4.[极客大挑战 2019]BabySQL5.[BJDCTF2020]Easy MD56.[极客大挑战 2019]HardSQL7.[GXYCTF2019]BabySQli8.[GYCTF2020]Blacklist9.[CISCN2019 华北赛区 Day2 Web1]Hack World1…

面试:HTTP 的长连接和短连接

https://www.cloudflare.com/zh-cn/learning/ddos/syn-flood-ddos-attack/ 一文搞懂 HTTP 的长连接和短连接_文晓武的博客-CSDN博客 1、HTTP 协议与 TCP/IP 协议的关系 HTTP 的长连接和短连接本质上是 TCP 长连接和短连接。HTTP 属于应用层协议,在传输层使用 TCP…

区块链交易明细中各字段的含义

Transaction Hash:标识本次交易的 hashStatus:交易状态Block:7768188 表示本次块高,217034 表示在 7768188 后面又新挖的区块数量,该数值会随着新区块增加而不断增长Timestamp:交易成功的时间戳From&#x…

直流无刷电机(BLDC)转速闭环调速系统及Matlab/Simulink仿真分析

文章目录前言一、转速闭环直流调速系统二、Matlab/Simulink仿真2.1.仿真电路分析2.2.仿真结果分析总结前言 变压调速是直流调速系统的主要调速方法,因此系统的硬件至少包含:可调直流电源和直流电机两部分。可调直流电源多采用直流PWM变换器,…

v-for的用法及key值原理

v-for的用途: (1)关键字: v-for遍历的时候,关键字有两个:in、of:两个关键字没有区别,用哪一个都行; (2)支持对象、数组、数字遍历&#xff1a…

java线程生命周期

如图 java线程的生命周期主要分为 新建: :新建这一刻 他会创建出一个线程对象 这个就是我们通过new线程类 这部操作实现的 当我们通过new出来的线程对象 执行 start方法之后 他就会进入第二个生命周期 就绪: 在这个过程中 他有执行资格 就是他是可以执行线程的程序的 但这个阶…

zk中session的基本原理、create、set、delete命令的使用(重补早期学习记录)

前言:补学习记录,几年前写一半丢草稿箱,突然看到,有强迫症所以补完 一、session基本原理 二、创建节点 create [-s] | [-e] 路径 数据 权限 还是一样的连接zk客户端 ./zkCli.sh 使用help查看命令 我们创建一个父节点,并存入数据 使用get来或者它的数据和状态信息 状态参…

【LeetCode】Day187-分割回文串

题目 131. 分割回文串【中等】 题解 如何判断字符串是回文串? 使用动态规划:f[i][j]代表s[i…j]是否是回文串,则有状态转移方程如下, 有了f[i][j],如何分割回文串? 利用回溯搜索,当s[0…i-1…

Spring参数校验

如何使用 Spring提供了简便的参数校验注解&#xff0c;不需要像以前一样if else去判断了&#xff0c;下面记录一下如何使用注解实现参数的校验 导入坐标 要使用各种注解完成参数的校验&#xff0c;需要导入hibernate-validator坐标以实现 <dependency><groupId>…

[Spring Cloud] nacos安装与使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…