nn.AdaptiveAvgPool2d(output_size)输入和输出怎么回事?

news2024/11/19 10:38:31

前言

nn.AdaptiveAvgPool2d(output_size)
函数作用:自适应进行平均池化。不用管输入、stride、padding,函数参数只有输出大小,其他的这个函数帮你搞定。
问题就是,我想知道他是咋搞定的?

1 函数的使用

先把例子摆上来:

input = torch.randn(20, 3, 10, 9)
m = nn.AdaptiveAvgPool2d((5, 7))
output = m(input)

1.1 输入输出

  • 输入 input 应为:(N, C, H_in, W_in) (C, H_in W_in)。这里的 N 表示batch_size,C 表示通道数量。
  • 输出 output 为: (N, C, S_0, S_1) (C, S_0, S_1) ,这里 C 不会改变。

1.2 写法

假设输入是input = torch.randn(20, 3, 10, 9)
他的参数有三种写法:

  1. 如果目标输出size是 5x7: m = nn.AdaptiveAvgPool2d((5, 7))
  2. 如果目标输出size是7x7,即长宽一样,就可以写成:m = nn.AdaptiveAvgPool2d(7)
  3. 如果目标输出size是10x7,即某一边与输入一样,就可以写成m = nn.AdaptiveAvgPool2d((None, 7))

2 函数是咋自适应的?

2.1 结论

2.1.1 input size 可以整除 output size

o u t p u t = i n p u t + 2 ∗ p a d d i n g − k e r n e l s t r i d e + 1 output = \frac{input+2*padding -kernel}{stride}+1 output=strideinput+2paddingkernel+1
其中 p a d d i n g = 0 、 s t r i d e = i n p u t o u t p u t , k e r n e l = i n p u t − ( o u t p u t − 1 ) ∗ s t r i d e padding=0、stride=\frac{input}{output},kernel=input-(output-1)*stride padding=0stride=outputinputkernel=input(output1)stride

举例:input size = 6*6,output = 2*3
计算:padding = 0、stride为3和2、kernel size = 3*2
代码验证:

m = nn.AdaptiveAvgPool2d((2, 3))
temp = torch.tensor([1.0,2,3,4,5,6,7,8,9,0,
                     1.0,2,3,4,5,6,7,8,9,0,
                     1.0,2,3,4,5,6,7,8,9,0,
                     1.0,2,3,4,5,6])
input = temp.reshape(1,6,6)
print("input1")
print(input)
output = m(input)
print("output1")
print(output)

在这里插入图片描述

2.1.2 不能整除的时候

自适应公式是这样的:
i 从0开始:
K i = c e i l ( ( i + 1 ) ∗ i n p u t o u t p u t ) − f l o o r ( i ∗ i n p u t o u t p u t ) K_i=ceil((i+1)*\frac{input}{output})-floor(i*\frac{input}{output}) Ki=ceil((i+1)outputinput)floor(ioutputinput)

S i = f l o o r ( ( i + 1 ) ∗ i n p u t o u t p u t ) − f l o o r ( i ∗ i n p u t o u t p u t ) S_i=floor((i+1)*\frac{input}{output})-floor(i*\frac{input}{output}) Si=floor((i+1)outputinput)floor(ioutputinput)

上述公式由源码推导,实际代码中并没有去计算核大小和步长,因为核大小和步长是在不算变化的。

举例解释一波:
假设我们输入size是1维的14,我们想要的输出的size是4,
14/4=3.5
那么我们核大小就为向上取整为4,步长随之而变
在这里插入图片描述
输出的size改为3,
14/3=4.666
那么我们核大小就为向上取整为5,步长随之而变
在这里插入图片描述

2.2 推导

pytorch官网代码
参考连接
在这里插入图片描述
在这里插入图片描述

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

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

相关文章

Socket和Http的通讯原理,遇到攻击会受到哪些影响以及如何解决攻击问题。

德迅云安全-领先云安全服务与解决方案提供商 Socket和HTTP通信原理: Socket通信原理: Socket是一种应用程序编程接口(API),用于在单个进程或多个进程之间进行通信。它提供了一种灵活的、异步的通信方式,使…

【蓝桥杯】翻硬币

翻硬币 思路&#xff1a; 其实有点贪心的意思&#xff0c;依次比较&#xff0c;不同就1&#xff0c;然后修改自己的字符串和下一个的字符串&#xff0c;再匹配。 #include<iostream> #include<string> using namespace std;string now,res;int main(void) {cin&g…

安美数字酒店宽带运营系统 SQL注入漏洞复现

0x01 产品简介 HiBOS酒店宽带运营系统隶属于安美世纪(北京)科技有限公司开发的一套酒店宽带管理系统。 0x02 漏洞概述 安美数字酒店宽带运营系统 online_status.php、language.php等接口处存在SQL注入漏洞,未经身份认证的攻击者可以通过此漏洞获取数据库权限,进一步利用可…

算法通关村第十三关-黄金挑战数论问题

计数质数 描述 : 给定整数 n &#xff0c;返回 所有小于非负整数 n 的质数的数量 。 题目 : LeetCode 204.计数质数 : 204. 计数质数 分析 : 解决这个题有一个有效的方法&#xff0c;叫埃氏筛 , 后来又产生了线性筛&#xff0c;奇数筛等改进的方法。 基本思想是如果 x是…

【ElementUI】一行代码解决图片预览

【ElementUI】一行代码解决图片预览 只需要在图片标签上加入:preview-src-list 只需要在图片标签上加入:preview-src-list 完整代码如下&#xff1a; <el-table-column label"封面" align"center" prop"cover" :sort-orders"[descend…

赴日程序员高年薪过上“躺平”生活?

日本的IT行业想要达到的高薪&#xff0c;也是需要很多资历和经验的&#xff0c;不过即使你是新卒&#xff0c;也能拿到相比国内来说让你满意的薪资。 刚入职的起薪是20-23万日元/月&#xff0c;情报信息业出身&#xff0c;技术掌握不错&#xff0c;起薪是25万-30万日元。之后经…

vue项目配置多个代理

在本地.env文件配置本地/测试/预发/正式 路径&#xff1a; 在vue.config.js 里面配置&#xff1a; module.exports defineConfig({transpileDependencies: false,lintOnSave: false,outputDir: process.env.VUE_APP_DIST,publicPath: /,css: {loaderOptions: {postcss: {// p…

生命在于折腾——将心脏献给计算机

还记得当初自己为什么选择计算机&#xff1f; 看到这个话题的时候&#xff0c;我害羞了&#xff0c;是的&#xff0c;你没有看错&#xff0c;我害羞了&#xff0c;这并不是说我有恋物癖&#xff0c;只是我对经过我手中的计算机&#xff0c;都有一种独特的情感。 背景 我是一…

蓝桥杯-03-蓝桥杯学习计划

蓝桥杯-03-蓝桥杯学习计划 参考资料 相关文献 报了蓝桥杯比赛&#xff0c;几乎零基础&#xff0c;如何准备&#xff0c;请大牛指导一下。谢谢&#xff1f; 蓝桥杯2022各组真题汇总(完整可评测) 基础学习 C语言网 ACM竞赛入门,蓝桥杯竞赛指南 廖雪峰的官方官网 算法题单 洛谷…

【Linux20.04-qt5.12.4软件安装与初步使用-qt在Linux使用-记录-笔记】

【Linux-qt软件安装与初步使用-qt在Linux使用-记录-笔记】 1、概述2、环境说明3、步骤总结1、了解并选择自己想要安装的版本2、访问 Qt 官方网站3、在 Qt 网站上找到下载部分&#xff08;自己想下载&#xff09;4、下载完成后&#xff0c;给安装程序文件赋予执行权限。5、自动配…

Python解释器的安装【侯小啾python基础领航计划 系列(一)】

Python解释器的安装【侯小啾python基础领航计划 系列(一)】 大家好,我是博主侯小啾, 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ…

人工智能与供应链行业融合:开启智能化供应链的新时代

随着人工智能技术的快速发展&#xff0c;供应链行业正迎来革命性变革。本文将探索人工智能在供应链管理中的应用领域&#xff0c;并分析其带来的益处和挑战&#xff0c;展望人工智能与供应链融合的未来发展趋势。 引言 供应链管理是企业运营中不可或缺的重要组成部分。它涵盖了…

你对SPA单页面的理解,它的优缺点分别是什么?

面试官&#xff1a;你对SPA单页面的理解&#xff0c;它的优缺点分别是什么&#xff1f;如何实现SPA应用呢 一、什么是SPA SPA&#xff08;single-page application&#xff09;&#xff0c;翻译过来就是单页应用SPA是一种网络应用程序或网站的模型&#xff0c;它通过动态重写当…

Grid++Report关于一张纸打多页

1.如果是纵向分割&#xff0c;设置【页分割数】打印即可 2.如果是多页排版&#xff0c;可在打印时选择版数 也可以设置打印前脚本事件: Report.Printer.SheetPages 2;//版数 Report.Printer.SheetPaperSize 9;//A4纸code

Gorm框架入门

文章目录 安装连接数据库Gorm基本示例自动迁移创建数据行查询数据更新数据删除数据 Gorm Model主键表名列名 时间戳CreatedAtUpdatedAtDeletedAt GORM&#xff08;Go Object Relational Mapper&#xff09;是一个在Go语言中使用的对象关系映射&#xff08;ORM&#xff09;库。它…

网工学习10-IP地址

一、IP地址概念 IP地址是一个32位的二进制数&#xff0c;它由网络ID和主机ID两部份组成&#xff0c;用来在网络中唯一的标识的一台计算机。网络ID用来标识计算机所处的网段&#xff1b;主机ID用来标识计算机在网段中的位置。IP地址通常用4组3位十进制数表示&#xff0c;中间用…

lua完整学习笔记

lua注释 &#xff0d;&#xff0d; 单行注释 &#xff0d;&#xff0d;[[ 多行注释 ]]-- lua数据结构 nil 无效值与Java的Null类似&#xff0c;但是在条件表示中是false boolean 布尔值&#xff0c;ture或者false number 双精度类型的浮点数 string 字…

撬动内容 10 倍增长,如何实现企业级全域内容治理

随着流量利好即将出尽&#xff0c;那些曾经仅依靠流量堆砌的营销策略&#xff0c;如今显得黯然失色。在新的市场环境下&#xff0c;更大的增长机会在哪里&#xff1f; 继续追求「运营效率」还是确立全新「战略定位」&#xff0c;企业的增长还有哪些新的可能性&#xff1f; 在刚…

日常操作之新增物料组并自动关联科目

1、创建物料组 OMSF 后台配置路径如下图&#xff1a; 直接创建一个物料组&#xff0c;给到对应描述即可。这里没有控制参数 2.、创建评估类 OMSK 我们在OBYC中配置科目时&#xff0c;是没有通过物料组的维度配置对应科目哦&#xff0c;但是评估类经常会用到GBB中的科目配置都…

Spring之AOP理解与应用

1. AOP的认识 面向切面编程&#xff1a;基于OOP基础之上新的编程思想&#xff0c;OOP面向的主要对象是类&#xff0c;而AOP面向的主要对象是切面&#xff0c;在处理日志、安全管理、事务管理等方面有非常重要的作用。AOP是Spring中重要的核心点&#xff0c;AOP提供了非常强…