PyTorch|构建自己的卷积神经网络——卷积层

news2024/9/27 9:27:22

图片

在构建我们的网络时,我们需要用到卷积层提取特征,来看到一些特别的东西,当图片经过卷积层,图片尺寸一般会变化。

当我们构建网络时,们需要确定各个层的参数,而这些参数,则是要提前计算的,当某些参数发生错误时,那么构建的网络也很可能发生错误。

来看这样一组代码:

>>> import torch>>> import torch.nn as nn>>> conv2=nn.Conv2d(in_channels=3,out_channels=6,kernel_size=5)

这里我们构建了一个卷积层,叫做conv2,同时,我们指定了三个参数,分别为输入通道为3,输出通道(所使用卷积核的个数)为6,卷积核的尺寸为5x5

下面输入图片数据。看看图片数据经过卷积层后尺寸如何变化。

图片

>>> img=torch.randn([1,3,28,28])>>> img.size()torch.Size([1, 3, 28, 28])
>>> img2=conv2(img)>>> img2.size()torch.Size([1, 6, 24, 24])

我们的图片有RGB三个通道,经过卷积层后通道数变为了6个,同时高和宽由28x28变为了24x24

再看下面一组代码:​​​​​​​

>>> conv1=nn.Conv2d(in_channels=3,out_channels=6,kernel_size=5,stride=1,padding=0)>>> img1=conv1(img)>>> img1.size()torch.Size([1, 6, 24, 24])

新的卷积层比原来的卷积层多了两个参数,分别为stride(步长)和padding(填充)。然而,同样的图片经过卷积层conv1和经过卷积层conv2结果相同

当然,这没什么奇怪的,尽管在conv2中我们并没有指定stride和padding,但pytorch中nn.Conv2d()中参数stride和padding分别默认为1和0。所以才有这种结果。

既然卷积操作是设定的,那么一定存在计算数据经过卷积层后的尺寸变化公式。

图片

公式很简单,就是这样:

进入卷积层的数据尺寸为正方形:则

  • 假设输入特征的大小为n x n

  • 假设卷积核的大小为 f x f

  • 令padding为p,步长stride为s

  • 则输出特征图的大小为 O = ( n - f + 2p )/s + 1


进入卷积层的数据尺寸为非正方形:则

  • 假设输入特征的大小为 nh x nw

  • 假设卷积核的大小为 fh x fw

  • 令padding为p,步长stride为s

  • 则输出特征图的高度为 Oh = (nh - fh + 2p)/s + 1

  • 输出特征图的宽度为 Ow = (nw - fw + 2p)/s + 1

再次回到上面的数据:​​​​​​​

>>> img=torch.randn([1,3,28,28])>>> img.size()torch.Size([1, 3, 28, 28])

图片的高和宽分别为28x28,

则输出特征图的大小为:(28-5+0)/1+1=24​​​​​​​

>>> conv1=nn.Conv2d(in_channels=3,out_channels=6,kernel_size=5,stride=1,padding=0)>>> img1=conv1(img)>>> img1.size()torch.Size([1, 6, 24, 24])

再次解释一下图像为什么从3通道变为了6通道:

原因就是我们使用了6个卷积核,每个卷积核(通道数为图片通道数)是对图片(含3个通道)操作的,每个卷积核对图片操作后,输出结果通道变为1,6个卷积核也就是最后得到的通道数为6,也就是得到了6个特征图

下面是一个卷积核对一张RGB三通道图片的卷积操作:

图片

很明显,卷积核通道数与图片通道数(RGB)相同,对每个通道卷积后合并得到最终只有一个通道的特征图

当然,nn.Conv2d()含有许多参数,并非只有这几个,但这几个在网络的构建中是必不可少的,在许多情况下是足够用的。

更详细的可以看pytorch官方文档:https://pytorch.org/

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

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

相关文章

【Python常用函数】一文让你彻底掌握Python中的numpy.append函数

大数据时代的到来,使得很多工作都需要进行数据挖掘,从而发现更多有利的规律,或规避风险,或发现商业价值。而大数据分析的基础是学好编程语言。本文和你一起来探索Python中的append函数,让你以最短的时间明白这个函数的原理。也可以利用碎片化的时间巩固这个函数,让你在处…

【数据分享】2024年我国主要城市地铁站点和线路数据

地铁站点与线路数据是我们经常会用到的一种基础数据。去哪里获取该数据呢? 今天我们就给大家分享一份2024年1月采集的全国有地铁城市的地铁站点与线路数据,数据格式为shp,数据坐标为wgs1984地理坐标。数据中不仅包括地铁,也包括轻…

软件测试|深入理解SQL RIGHT JOIN:语法、用法及示例解析

引言 在SQL中,JOIN是一种重要的操作,用于将两个或多个表中的数据关联在一起。SQL提供了多种JOIN类型,其中之一是RIGHT JOIN。RIGHT JOIN用于从右表中选择所有记录,并将其与左表中匹配的记录组合在一起。本文将深入探讨SQL RIGHT …

x-cmd pkg | you-get - web 媒体内容下载工具

目录 简介首次用户功能特点竞品和相关作品进一步阅读 简介 You-Get 是一个开源的命令行小型下载工具,用于从各种网站下载视频、音频和其他媒体文件。 它可以解析和下载嵌套在网页中的媒体,能从 YouTube、优酷、Niconico 、bilibili 等热门网站下载视频、…

leetcode:1108. IP 地址无效化

一、题目 二、函数原型 char* defangIPaddr(char* address) 三、思路 本题通俗来讲就是将字符串中的 . 替换为 [.] 先遍历字符串得出有num个 . 且申请 len 2*num 1 个char空间ans。len是原字符串长度,2*num是[ ]的个数,1是 ‘ \0 ’ 的空间。 …

STL——vector详解

目录 💡基本概念 💡存放内置数据类型 💡存放自定义数据类型 💡存放自定义数据类型指针 💡vector容器嵌套容器 💡vector构造函数 💡vector赋值操作 💡vector容量和大小 &…

Linux基础命令@grep、wc、管道符

目录 grep概念语法作用演示一演示二演示三,带选项 -n wc概念语法作用wc,不带选项-c,统计字节数-m,统计字符数-l,统计行数-w,统计单词数 管道符语法作用演示一演示二演示三演示四演示五 总结 grep 概念 gre…

十一、工具盒类(MyQQ)(Qt5 GUI系列)

目录 ​编辑 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 抽屉效果是软件界面设计中的一种常用形式,可以以一种动态直观的方式在有限大小的界面上扩展出更多的功能。本例要求实现类似 QQ 抽屉效果。 二、实现代码 #include "dialog.…

web前端开发技术复习问答题

目录 1.简述常见单标签和双标签有哪些? 2.常见块级元素和行级元素有哪些? 3.简述常见的列表有哪些?他们有什么区别? 4.简述超链接的href属性值如何设置?有什么区别 5.CSS基本语法 6. css中常见的引入方式有几种&…

共聘猫品牌创始人杨涛宾:从海关到人力资源行业的华丽转身

专访山东共聘猫教育科技集团董事长杨涛宾 2024新年的第一次人物专访,我们来到山东济南。大力财经的采访对象是创业者杨涛宾,他是山东共聘猫教育科技集团董事长,也是共聘猫品牌创始人和主要打造者。 我们面前的杨涛宾外表朴实,举…

图神经网络入门

图神经网络(GNN)是一组在图领域工作的深度学习方法。 这些网络最近已应用于多个领域,包括: 组合优化、推荐系统、计算机视觉—仅举几例。 这些网络还可用于对大型系统进行建模,例如社交网络、蛋白质-蛋白质相互作用网络…

使用docker镜像快速构建TVM

TVM docekr编译 文章目录 TVM docekr编译使用云镜像使用docker进行本地构建 使用云镜像 下载docker镜像 如果对docker指令不熟悉可以查阅: docker cli命令行 AP I TVM docker hub镜像 docker pull tlcpack/ci-cpu:20230604-060130-0af9ff90e运行container docker…

Java面试——框架篇

1、Spring框架中的单例bean是线程安全的吗? 所谓单例就是所有的请求都用一个对象来处理,而多例则指每个请求用一个新的对象来处理。 结论:线程不安全。 Spring框架中有一个Scope注解,默认的值就是singleton,单例的。一…

Java学习——设计模式——行为型模式2

文章目录 行为型模式状态模式观察者模式中介者模式迭代器模式访问者模式备忘录模式解释器模式 行为型模式 行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象无法单独完成的任务,涉及算法与对象间职责的…

kubernetes(六)

文章目录 1. k8s架构2. k8s安装2.1 颁发证书2.2 部署etcd集群2.3 master节点安装2.3.1 api-server服务安装2.3.2 controller-manager服务安装2.3.3 scheduler服务安装 2.4 node节点安装2.5 配置flannel网络 1. k8s架构 2. k8s安装 # 增加免密操作 [rootk8s-node3 ~]# ssh-keyge…

搭建一个教育小程序的必要步骤

随着科技的飞速发展,小程序已经深入到我们生活的方方面面。对于教育行业来说,小程序的出现不仅为教育机构提供了新的宣传和互动平台,更为学生和家长带来了更为便捷的学习体验。那么,如何开发一款适合教育机构的小程序呢&#xff1…

react+AntDesign 之 pc端项目案例

1.环境搭建以及初始化目录 CRA是一个底层基于webpack快速创建React项目的脚手架工具 # 使用npx创建项目 npx create-react-app react-jike# 进入到项 cd react-jike# 启动项目 npm start2.安装SCSS SASS 是一种预编译的 CSS,支持一些比较高级的语法,…

鸿蒙OS:不止手机,是物联网应用开发

鸿蒙开发是华为自主研发的面向全场景的分布式操作系统,旨在将生活场景中各类终端进行整合,实现不同终端设备间的快速连接、资源共享、匹配合适设备、提供流畅的全场景体验。 鸿蒙开发具有以下特点: 面向全场景:鸿蒙系统能够覆盖…

[足式机器人]Part2 Dr. CAN学习笔记-动态系统建模与分析 Ch02-3流体系统建模

本文仅供学习使用 本文参考: B站:DR_CAN Dr. CAN学习笔记-动态系统建模与分析 Ch02-12课程介绍电路系统建模、基尔霍夫定律 流量 flow rate q q q m 3 / s m^3/s m3/s 体积 volume V V V m 3 m^3 m3 高度 heigh h h h m m m 压强 pressure p p p …

竞赛练一练 第23期:NOC大赛每日一练,python题目刷题第8天,包含答案解析

题目来自:NOC 大赛创客智慧编程赛项Python 复赛模拟题(二) NOC大赛创客智慧编程赛项Python 复赛模拟题(二) 第一题: 编写一个成绩评价系统,当输入语文、数学和英语三门课程成绩时,输出三门课程总成绩及其等级。 (1)程序提示用户输入三个数字,数字分别表示语文、数学、…