关于ShuffleNetV1中的channel shuffle操作【代码分析】

1. 官方给出的代码 

旷视科技在自己的开源GitHub上给出的channel shuffle相关代码如下图所示:

      分析上图中的代码,旷视科技将channel shuffle这个操作视为一个函数,函数传入的参数是输入张量x,x的shape为(batchsize, num_channels, height, width)。
      首先对输入张量x使用data.size() 方法进行解包,从输入张量 x 中提取批量大小、通道数、高度和宽度。
      使用assert函数检查 group【分组个数】是否能够整除num_channels,若不能够整除,则函数运行到此处抛出AssertionError 异常;若能够整除,则正常运行。
      每个小组的通道数group_channels 为总体通道数num_channels除分组个数group。
接下来的三行代码均对x操作,我们一步一步来剖析:
首先经过:

x = x.reshape(batchsize, group_channels, self.group, height, width)

      这表示x需要经过reshape操作,将num_channels分为group个组,每个组中的通道数为group_channels。

在经过如下操作:

x = x.permute(0, 2, 1, 3, 4)

      这表示要将x的第1个维度与第2个维度进行互换,也就是说,可以理解为在这里对x经历了转置操作。

  • 重新排列维度,使得维度的顺序变为:
    • 维度 0:批量大小保持不变。
    • 维度 2:将组的维度移到第二位。
    • 维度 1:将每组的通道维度移到后面。
    • 维度 3 和 4:高度和宽度保持不变。
  • 这一步的作用是将不同组的通道位置互换,从而实现通道间的信息交互。

然后再经过如下操作:

x = x.reshape(batchsize, num_channels, height, width)

将重排后的张量重塑回 (batchsize, num_channels, height, width) 原始形状。
最后借助 return x 返回channel shuffle后的张量。

总结 

该方法实现了channel shuffle的过程,通过将通道分组、重排和恢复形状来增强通道间的信息交互,通常用于提升轻量级网络的性能。channel shuffle有助于使模型更好地利用特征共享,提高整体表现。 

 2. 喂入测试张量进行测试【图例分析】

假设输入张量的shape为:(1, 12, 1, 1)  group=3
首先通过以下代码构建输入张量,使用unsqueeze函数是为了给一维张量进行扩维,使之符合输入张量的shape。

对官方代码小修小改,得到独立可运行的channel_shuffle函数,如下图所示:

以图说明上述代码:

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

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

相关文章

Ceph 基本架构(一)

Ceph架构图 Ceph整体组成 Ceph 是一个开源的分布式存储系统,设计用于提供优秀的性能、可靠性和可扩展性。Ceph 的架构主要由几个核心组件构成,每个组件都有特定的功能,共同协作以实现高可用性和数据的一致性。 以下是 Ceph 的整体架构及其…

大数据处理从零开始————3.Hadoop伪分布式和分布式搭建

1.伪分布式搭建(不会用,了解就好不需要搭建) 这里接上一节。 1.1 伪分布式集群概述 伪分布式集群就是只有⼀个服务器节点的分布式集群。在这种模式中,我们也是只需要⼀台机器。 但与本地模式不同,伪分布式采⽤了分布式…

新手操作指引:快速上手腾讯混元大模型

引言 腾讯混元大模型是一款功能强大的AI工具,适用于文本生成、图像创作和视频生成等多种应用场景。对于新手用户,快速上手并充分利用这一工具可能会有些挑战。本文将提供详细的新手操作指引,帮助您轻松开始使用腾讯混元大模型。 步骤一&…

计算机毕业设计 基于Python内蒙古旅游景点数据分析系统 Django+Vue 前后端分离 附源码 讲解 文档

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…

006——队列

目录 队列: 单端队列: 存储结构: 顺序队列 思路1:r指针指向尾元素的下一个位置 思路2:r指针指向真正的尾元素 如何解决假溢出的问题? 链式队列 双端队列 存储方式: 顺式存储 代码案例…

Redis基础数据结构之 Sorted Set 有序集合 源码解读

目录标题 Sorted Set 是什么?Sorted Set 数据结构跳表(skiplist)跳表节点的结构定义跳表的定义跳表节点查询层数设置 Sorted Set 基本操作 Sorted Set 是什么? 有序集合(Sorted Set)是 Redis 中一种重要的数据类型,…

国央企如何完善黑名单排查体系?

国央企完善黑名单排查体系的关键在于建立健全的供应商管理机制、风险评估体系和信息共享平台。以下是一些具体措施: 1.建立黑名单库:国央企可以依据外部黑名单数据(如政府监管部门、行业协会、第三方征信机构公布的黑名单)和内部…

瑞芯微RK3588开发板Linux系统添加自启动命令的方法,深圳触觉智能Arm嵌入式鸿蒙硬件方案商

本文适用于触觉智能所有Linux系统的开发板、主板添加自启动命令的方法,本次使用了触觉智能的EVB3588开发板演示,搭载了瑞芯微RK3588旗舰芯片。 该开发板为核心板加底板设计,为工业场景设计研发的模块化产品,10年以上稳定供货,帮助…

免费分享:全月地质图

数据详情 世界第一幅1∶250万月球全月地质图 数据属性 数据名称:月球1:250万全月地质图 数据时间:- 空间位置:月球 数据格式:jpg 空间分辨率:1:250万 坐标系:- 下载方法 打开数字地球开放平台网站&…

跨境商家如何在1688找优质供应商货源,新手卖家必看

选产品和找供应,是每个跨境人不可避免的,但是盲目的选品,无疑是大海捞针。如果你选择的商品没有固定的供应商,要上1688找又得花不少时间,店雷达选品工具就能够帮助我们解决这个问题。据我所知,很多跨境同行…

STM32上实现FFT算法精准测量正弦波信号的幅值、频率和相位差(标准库)

在研究声音、电力或任何形式的波形时,我们常常需要穿过表面看本质。FFT(快速傅里叶变换)就是这样一种强大的工具,它能够揭示隐藏在复杂信号背后的频率成分。本文将带你走进FFT的世界,了解它是如何将时域信号转化为频域…

最新绿豆影视系统 /反编译版源码/PC+WAP+APP端 /附搭建教程+软件

源码简介: 最新的绿豆影视系统5.1.8,这可是个反编译版的源码哦!它不仅支持PC端、WAP端,还有APP端,一应俱全。而且附上了搭建教程和软件,安卓和苹果双端都能用,实用方便! 优化内容&…

设计模式 组合模式(Composite Pattern)

组合模式简绍 组合模式(Composite Pattern)是一种结构型设计模式,它允许你将对象组合成树形结构来表示“部分-整体”的层次结构。组合模式使得客户端可以用一致的方式处理单个对象和组合对象。这样,可以在不知道对象具体类型的条…

K8S容器实例Pod安装curl-vim-telnet工具

在没有域名的情况下,有时候需要调试接口等需要此工具 安装curl、telnet、vim等 直接使用 apk add curlapk add vimapk add tennet

裸土检测算法实际应用、裸土覆盖检测算法、裸土检测算法

裸土检测算法主要用于环境保护、农业管理、城市规划和土地管理等领域,通过图像识别技术来检测和识别地表上的裸露土壤。这种技术可以帮助管理者实时监控裸土面积,及时采取措施,防止水土流失、环境污染和生态退化。 一、技术实现 裸土检测算…

内核驱动开发之系统移植

系统移植 系统移植:定制linux操作系统 系统移植是驱动开发的前导,驱动开发是系统运行起来之后,在内核中新增一些子功能而已 系统移植就四个部分: 交叉编译环境搭建好bootloader的选择和移植:BootLoader有一些很成熟…

Linux-DHCP服务器搭建

环境 服务端:192.168.85.136 客户端:192.168.85.138 1. DHCP工作原理 DHCP动态分配IP地址。 2. DHCP服务器安装 2.1前提准备 # systemctl disable --now firewalld // 关闭firewalld自启动 # setenforce 0 # vim /etc/selinux/config SELINU…

如何在精益六西格玛项目实践中激励小组成员保持积极性?

在精益六西格玛项目实践中,激励小组成员保持积极性是推动项目成功与持续改进的关键因素。精益六西格玛作为一种集精益生产与六西格玛管理精髓于一体的管理模式,旨在通过流程优化、质量提升及成本降低,实现企业的卓越绩效。然而,这…

Linux自主学习篇

用户及权限管理 sudo 是 "superuser do" 的缩写,是一个在类 Unix 操作系统(如 Linux 和 macOS)中使用的命令。它允许普通用户以超级用户(root 用户)的身份执行命令,从而获得更高的权限。 useradd…

网络资源模板--Android Studio 垃圾分类App

目录 一、项目演示 二、项目测试环境 三、项目详情 四、完整的项目源码 一、项目演示 网络资源模板--垃圾分类App 二、项目测试环境 三、项目详情 登陆注册 设置点击监听器:当用户点击注册按钮时触发事件。获取用户输入:从输入框获取用户名和密码&a…