深入理解卷积函数torch.nn.Conv2d的各个参数以及计算公式(看完写模型就很简单了)

代码解释帮助理解:

torch.randn(10, 3, 32, 32),初始数据:(10, 3, 32, 32)代表有10张图片,每张图片的像素点用三个数表示,每张图片大小为32x32。(重点理解这个下面就好理解了)
nn.Conv2d(3, 64, kernel_size=3, padding=1)理解Conv2d参数。表示图片输入的通道是3,输出为64通道(因为用的是64个卷积核(滤波器)。这样就理解卷积的含义了。

而conv3x3_1 = nn.Conv2d(64, 164,)#表明输入通道是64,输出通道是164.这里的输入要等于上一层的输出通道64,相当于有64个矩阵。输出通道数目可以自定义指定。


得出结论(重点):

nn.Conv2d(3, 64,)的前两个参数输入通道数和输出通道数其实在修改的是图片的单个像素用多少个数字表示,如RGB是用三种颜色(用三个数字表示一个像素)。也就是修改的是torch.randn(10, 3, 32, 32)里面的3。

后三个参数卷积核大小(kernel_size)和步长(stride)以及填充(padding)是改变图片的尺寸。也就是修改的是torch.randn(10, 3, 32, 32)里面的32x32。

 

import torch
import torch.nn as nn

# 创建输入张量
input_tensor = torch.randn(10, 3, 32, 32)  # 输入通道数为3,输入特征图尺寸为32x32,相当于有3个32x32的矩阵,也就是一张图片

# 创建3x3卷积层
conv3x3 = nn.Conv2d(3, 64, kernel_size=3, padding=1)#表明输入通道是3,输出通道是64

# 进行3x3卷积操作
output = conv3x3(input_tensor)

# 打印输出特征图的尺寸
print(output.size())
torch.Size([10, 64, 32, 32])

第一种代码:

conv3x3_1 = nn.Conv2d(64, 164, kernel_size=3, padding=1)#表明输入通道是64,输出通道是164.这里的输入要等于上一层的输出通道64,相当于有64个二矩阵

# 进行3x3卷积操作
output1 = conv3x3_1(output)
print(output1.size())

输出结果:torch.Size([10, 164, 32, 32])

上面修改第二层Conv2d()的输出通道数参数,改为164,发现最后输出结果output1也只是输出通道数目(也就是一个像素点用多少数字表示)变化,其他三个参数都没变,分别代表10张图片,图片尺寸为32x32。

**************************************************************************************

那么如何让图片大小32x32变化呢?答案就是改变卷积核大小(kernel_size)和步长(stride)以及填充(padding)。

将第一种代码改为下面代码:

conv3x3_1 = nn.Conv2d(64, 164, kernel_size=5, padding=4,stride=2)#表明输入通道是64,输出通道是164.这里的输入要等于上一层的输出通道64,相当于有64个二矩阵

# 进行3x3卷积操作
output1 = conv3x3_1(output)
print(output1.size())
输出结果:torch.Size([10, 164, 18, 18])

发现图片大小变成18x18了,

计算公式为

Hout公式代入:18 = [32+2x4-1x(5-1)-1]/2+1结果再向下取整 (也就是35/2+1向下取整 = 18)

同理Wout公式带入也是18(明显也能看出参数矩阵都是矩阵,长宽的值一样)

tips1:nn.Conv2d中dilation这个参数 控制卷积核点的间距 不常用,代入上式默认值为1

dilation(int or tuple, optional)Spacing between kernel elements. Default: 1扩张操作:控制kernel点(卷积核点)的间距,默认值:1

tips2:有时候改完这三个参数或者其中的一两个,也可能会不同的参数经过同一个公式,导致图片尺寸不变。

最重要的是要理解nn.Conv2d参数的意思(下面是常用的五个参数):

参数参数类型
in_channelsintNumber of channels in the input image输入图像通道数
out_channelsintNumber of channels produced by the convolution卷积产生的通道数
kernel_size(int or tuple)Size of the convolving kernel卷积核尺寸,可以设为1个int型数或者一个(int, int)型的元组。例如(2,3)是高2宽3卷积核
stride(int or tuple, optional)Stride of the convolution. Default: 1卷积步长,默认为1。可以设为1个int型数或者一个(int, int)型的元组。
padding(int or tuple, optional)Zero-padding added to both sides of the input. Default: 0填充操作,控制padding_mode的数目。

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

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

相关文章

python自动打卡的代码

好的,以下是一个简单的Python自动打卡程序代码,用于在特定时间自动打卡: python import datetime import time # 设置打卡时间和打卡间隔 check_in_time datetime.datetime(2023, 3, 1, 9, 30) check_out_time datetime.datetime(2023, 3, …

苹果电脑免费第三方软件CleanMyMac X2025电脑版垃圾清理软件神器

Mac电脑用户在长时间使用电脑之后,时常会看到“暂存盘已满”的提示,这无疑会给后续的电脑使用带来烦恼,那么苹果电脑暂存盘已满怎么清理呢,下面将给大家带来一些干货帮你更好地解决这个问题。 CleanMyMac X2024全新版下载如下: h…

springboot之统一异常封装

一:统一返回实体对象 JsonInclude(Include.NON_NULL) public class ResponseObject implements Serializable {private static final long serialVersionUID 1L;private Integer code 0;private String message "success";private Long time System.…

新版文件同步工具(Python编写,其中同时加入了多进程计算MD5、多线程复制大文件、多协程复制小文件、彩色输出消息、日志功能)

两个月前,接到一个粉丝的要求,说希望在我之前编写的一个python编写的文件同步脚本(Python编写的简易文件同步工具(已解决大文件同步时内存溢出问题)https://blog.csdn.net/donglxd/article/details/131225175)上加入多线程复制文件的功能,前段…

flutter中固定底部按钮,防止键盘弹出时按钮跟随上移

当我们想要将底部按钮固定在底部,我们只需在Widget中的Scaffold里面加一句 resizeToAvoidBottomInset: false, // 设置为false,固定页面不会因为键盘弹出而移动 效果图如下

CSCWD 2024会议最后一天 女高音惊艳全场,相声笑破肚皮

会议之眼 快讯 今天是第27届国际计算机协同计算与设计大会(CSCWD 2024)举办的最后一天!会议依然热络,紧张而充实!各个技术分论坛持续展开,学者们的热情不减,对技术领域的热爱和探索精神令人赞叹…

国产开源物联网操作系统

软件介绍 RT-Thread是一个开源、中立、社区化发展的物联网操作系统,采用C语言编写,具有易移植的特性。该项目提供完整版和Nano版以满足不同设备的资源需求。 功能特点 1.内核层 RT-Thread内核包括多线程调度、信号量、邮箱、消息队列、内存管理、定时器…

VS配置三方依赖

1.配置include 1.1.打开属性 1.2.打开“配置属性”-"C/C"-"常规" 2.配置lib 2.1.配置lib目录 打开"配置属性"-“链接器”-“常规”。 2.2.配置具体的lib 打开"配置属性"-"链接器"-“输入”。 也可以通过代码方式加入&…

差速机器人模型LQR 控制仿真(c++ opencv显示)

1 差速机器人状态方程构建 1.1差速机器人运动学模型 1.2模型线性化 1.3模型离散化 2离散LQR迭代计算 注意1:P值的初值为Q。见链接中的: 注意2:Q, R参数调节 注意3:LQR一般只做横向控制,不做纵向控制。LQR输出的速度…

明火检测实时识别报警:视觉算法助力安全生产管理

背景与现状 在各种工作、生产环境下,明火的存在往往是潜在的安全隐患。无论是加油站、化工园区、仓储场所还是校园,明火一旦失控就会引发火灾,造成严重的人员伤亡和财产损失。传统的明火检查手段主要依赖于人工巡查和定期的消防检查&#xf…

拯救被勒索病毒加密的文件

无意间打开了勒索病毒的告知文件,几年前很多人很熟悉这个文件。 --- Welcome. Again. --- [] Whats Happen? [] Your files are encrypted, and currently unavailable. You can check it: all files on your computer has extension u347q678t1. By the way, e…

安装nvm切换多个nodejs

今天实习,用到了公司的老项目vue2的,需要更换nodejs版本 我想直接安装一个16版本的,然后自己在webstrom中配置一下exe文件就可以了。 然而第一步就不行,在安装另一版本中显示 然后博主在这里介绍一下怎么使用nvm可以快速切换node…

动手学深度学习——多层感知机

1. 感知机 感知机本质上是一个二分类问题。给定输入x、权重w、偏置b,感知机输出: 以猫和狗的分类问题为例,它本质上就是找到下面这条黑色的分割线,使得所有的猫和狗都能被正确的分类。 与线性回归和softmax的不同点&#xff1…

Chronos:学习时间序列的大语言模型(代码解析)

前言 《Chronos: Learning the Language of Time Series》原文地址,Github开源代码地址Chronos:学习时间序列的大语言模型(论文解读)CSDN地址GitHub项目地址Some-Paper-CN。本项目是译者在学习长时间序列预测、CV、NLP和机器学习…

【漫画版】指挥官的排序战术:快速排序算法解密

作者介绍:10年大厂数据\经营分析经验,现任字节跳动数据部门负责人。 会一些的技术:数据分析、算法、SQL、大数据相关、python,欢迎探讨交流 欢迎加入社区:码上找工作 作者专栏每日更新: LeetCode解锁1000题…

使用Python在PowerPoint演示文稿之间复制样式(复制幻灯片母版)

在专业演示文稿设计与制作领域,多场演示间保持一致性至关重要。在PowerPoint演示文稿之间复制幻灯片母版成为了一项关键技巧,用以维持统一的视觉风格,确保品牌形象的一致性,并提升观众的参与度。这一做法不仅能节省宝贵的时间&…

OC foudation框架(下)的学习

OCfoudation框架(下) 前面学习了有关OCfoudation框架的部分内容,我们现在对于后面的内容继续学习。 文章目录 OCfoudation框架(下)数组(NSArray和NSMutableArray)对集合元素整体调用方法排序使用…

SwinIR: Image Restoration Using Swin Transformer

ICCV2021 workshophttps://github.com/JingyunLiang/SwinIR 问题引入 将swim transformer使用到图像恢复任务当中,因为卷积存在不能建模长距离依赖以及使用相同的卷积核来恢复不同的图像区域;并不是首个将transformer引入图像恢复中的方法,…

简单的Python HTML 输出

1、问题背景 一名初学者在尝试将 Python 脚本输出到网页上时遇到了一些问题。他当前使用 Python 和 HTML 进行开发,并且遇到了以下问题: 担心自己的代码过于复杂,尤其是 WebOutput() 函数。希望通过 JavaScript 使用 HTML 模板文件更新数据。…

Java多线程与并发编程

1.多线程基础 1.1 线程相关概念 程序(program):是为完成特定任务、用某种语言编写的一组指令的集合。简单的说:就是我们写的代码 进程: 1. 进程是指运行中的程序,比如我们使用QQ,就启动了一个进程,操作系统就会为该进程…