通道洗牌的思想神了

news2024/11/27 4:02:26

大家好啊,我是董董灿。

昨天写了一篇关于分组卷积的文章:分组卷积的思想神了,然后有同学希望多了解下通道洗牌。

我个人感觉,通道洗牌这个算法,或者说这个思想,可以称之为小而精,并且是实际解决了大问题的经典算法。

今天就来一起看看。

1、通道洗牌的背景

分组卷积(Group Convolution)那篇文章中提到,分组卷积的好处是可以将一个大卷积在通道维度拆分成多个小卷积,来实现每个小卷积的并行计算,从而减少内存占用,提高性能。

但是分组卷积会带来一个副作用,那就是组与组之间的特征无法交互和融合,会使得整个神经网络最终的训练/推理效果不尽如人意。

怎么办呢?人们就想到了洗牌这一算法。

通道洗牌主要就是为了解决分组卷积带来的副作用,也就是组间的特征无法交互融合。

这里举一个例子说明一下这个问题。

一个年级共150人,如果你是年级主任,你肯定希望这150人的成绩都能达到最好,成绩好的帮助成绩差的,大家互相帮助,一起进步。

最理想的情况是,每个人都可以和其他人互帮互助,这样,150人中成绩最差的同学,也可以和成绩最好的同学交流,来提高自己的成绩。

但是,一个不好的现象便是,我们通常会将150人分班学习,假设150人分了3个班,每个班50人。

结果便是每个班内的同学交流很多,而班与班之间的交流却很少。

假设成绩最差的同学在3班,称他为学渣A,3班成绩最好的同学称他为学霸B,而3个班150人中的年级第一在1班,称他为学神C。

很显然,学渣A和学神C是很难在一起交流学习的,因为不在一个班。

而学渣A能够到的天花板,也就是本班的学霸B,而学霸B可能比学神A的平均成绩少20分。

这就会导致班与班之间学习发展不平衡。

一个很容易想到的解决办法就是学生走班制,让每个班的学生可以有机会去其他班上课。使3个班的平均成绩尽可能的接近。

通道洗牌就是类似于学生走班制。

在进行分组卷积之前,经过通道洗牌操作,可以把通道内的数据(150个学生)随机打乱或按一定规则打乱,然后分为三组。

记住每次计算分组卷积前都这么做,可以很有效的确保每次分到三个班的学生都是不同的,从而实现整体的信息交流。

图片

2、如何完成洗牌

利用程序完成洗牌有很多种方法,比如随机洗牌等,但一个更简单的完成洗牌的动作便是转置

我们假设有以下数据,用下图左侧图来表示,分组前橙色和蓝色是不在一个组里的。

经过对原始数据做转置(行与列互换)之后,可以看到每一组中都包含三种颜色的数据,也就完成了转置前不同组间的信息交流。

对于卷积的通道而言,利用转置来完成通道洗牌也很简单。

假设通道数为 c,分组卷积将通道数分为 g 组,每组 n 个特征,那么可以得到 c = g * n。

利用程序完成洗牌的逻辑便是,先将一维通道数据 reshape 成 (g, n) 的二维数据,然后转置变成 (n, g) 的数据,然后再 reshape 回一维数据,完成分组和通道洗牌操作。

伪代码如下

c = c.reshape((g, n))group_c = np.transpose(c, (1, 0))new_c = group_c.reshape((n, g))

三行代码就可以完成通道洗牌的操作,是不是很简单?

关于卷积的其他文章,感兴趣的小伙伴可以查看:

面试官问,1x1 的卷积有什么用?

空洞卷积 —— 给神经网络装上"放大镜"

5分钟入门卷积算法

5分钟理解什么是卷积的特征提取

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

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

相关文章

【Tomcat】如何在idea上部署一个maven项目?

目录 1.创建项目 2.引入依赖 3.创建目录 4.编写代码 5.打包程序 6.部署项目 7.验证程序 什么是Tomcat和Servlet? 以idea2019为例: 1.创建项目 1.1 首先创建maven项目 1.2 项目名称 2.引入依赖 2.1 网址输入mvnrepository.com进入maven中央仓库->地址…

新一代AI技术,引领医疗智能革新共筑未来医疗生态

加快推进数字化转型,是我国抢抓新一轮科技革命和产业变革机遇的必然选择,数字化转型已不是“选择题”,而是关乎生存和长远发展的“必修课”。在此目标下,公共服务领域迎来深刻变革,医院也不例外,数字经济的…

微信小程序 - 页面继承(非完美解决方案)

微信小程序 - 面页继承(非完美解决方案) 废话思路首页 indexindex.jsindex.jsonindex.wxml 父页面 page-basepage-base.jspage-base.wxml 子页面 page-apage-a.jspage-a.wxml 子页面 page-bpage-b.jspage-b.wxml 其它app.jsapp.jsonapp.wxss 参考资料 废…

21.12 Python 实现网站服务器

Web服务器本质上是一个提供Web服务的应用程序,运行在服务器上,用于处理HTTP请求和响应。它接收来自客户端(通常是浏览器)的HTTP请求,根据请求的URL、参数等信息生成HTTP响应,并将响应返回给客户端&#xff…

海康工业相机的使用(草稿)

下载: 海康机器人-机器视觉-下载中心 (hikrobotics.com) Windows版本测试: 机器视觉工业相机客户端MVS V4.2.1(Windows) Ubuntu版本开发: 机器视觉工业相机客户端MVS V2.1.2 (Linux) 机器视觉工业相机SDK V4.1.2版…

一个脚本快速查看网站用到的技术

shigen坚持日更的博客写手,擅长Java、python、vue、shell等编程语言和各种应用程序、脚本的开发。坚持记录和分享从业两年以来的技术积累和思考,不断沉淀和成长。 今天给大家带来的技巧是:一个脚本快速的查看网站运用的技术和域名备案信息。 …

NVIDIA cuda安装时全部失败

查看了很多博客,有写的非常详细清楚的博客,csdn上真的是一个很好的学习平台,我在学习过程中遇到的好多bug,都能在这上面找到解决方法,就是一个老师的存在。 我安装NVIDIA cuda安装时失败了N次,数不清了&am…

san.js源码解读之模版解析(parseTemplate)篇——readAccessor函数

相关文章:san.js源码解读之模版解析(parseTemplate)篇——readIdent函数 一、源码分析 /*** 读取访问表达式** param {Walker} walker 源码读取对象* return {Object}*/ function readAccessor(walker) {var firstSeg readIdent(walker);switch (firstSeg) { // …

【论文复现:Active Learning via Local Structure Recontruction】

论文复现:Active Learning via Local Structure Reconstruction 目标函数优化过程公式(16)推到python代码链接如下: 目标函数 优化过程 公式(16)推到 原文中省略了上述推导过程 在这里我们自己推导一下,只要有一点数学基础就很简单&#xff…

【计算机网络】数据链路层——以太网

文章目录 前言什么是以太网以太网帧格式6位目的地址和源地址2位类型数据长度CRC 校验和 数据在数据链路层是如何转发的 前言 前面我们学习了关于应用层——自定义协议、传输层——UDP、TCP协议、网络层——IP协议,今天我将为大家分享关于数据链路层——以太网方面的…

基于蝙蝠算法的无人机航迹规划-附代码

基于蝙蝠算法的无人机航迹规划 文章目录 基于蝙蝠算法的无人机航迹规划1.蝙蝠搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用蝙蝠算法来优化无人机航迹规划。 1.蝙蝠搜索算法 …

MAYA教程之灯光与渲染

灯光介绍 MAYA中有六种光源环境光:模拟环境中的光源,光线是四面八方的平行光:模拟太阳光点光源:模拟蜡烛等光源聚光灯:模拟夜场那种光源区域光:模拟窗户照进室内的光源体积光:模拟激光在MAYA的…

基于Java的流浪动物救助管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding) 代码参考数据库参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作者&am…

Generalised Zero-shot Learning with Multi-modal Embedding Spaces

分类器被 τ \tau τ校准 辅助信息 作者未提供代码

震惊!什么是测试用例?为什么要有测试用例?测试用例举例!测试用例竟然...被如此解释!

1、什么是测试用例 测试用例(Test Case)是为了实施测试而向被测试的系统提供的一组集合,这组集合包含:测试环境、操作步骤、测试数据、预期结果等要素。 生活举例: 大家有没有在牛客上刷题 牛客给大家提供了一套可以编…

【数据结构】排序算法总结

⭐ 作者:小胡_不糊涂 🌱 作者主页:小胡_不糊涂的个人主页 📀 收录专栏:浅谈数据结构 💖 持续更文,关注博主少走弯路,谢谢大家支持 💖 总结 1. 归并排序2. 排序算法复杂度…

C/C++跨平台构建工具CMake-----灵活添加库并实现开发和生产环境的分离

目录 1.概述2.创建项目3 配置运行项目3.1 编写开平方根示例代码3.2 编写CMake构建脚本 4.使用子模块实现求平方根的功能4.1 在子模块中实现两种求平方根的方法4.2 构建Mathfunctions子模块4.3 在根目录引用子模块的功能4.3.1 编写构建脚本4.3.2 编写C代码使用MathFunctions库中…

CNCC2023

中国工程院院士,之江实验室主任、阿里云创始人王坚:计算驱动的科学发现和科技创新。 国际计算机学会主席雅尼斯约阿尼迪斯(ACM President Yannis Ioannidis)。 电气和电子工程师协会计算机协会主席妮塔帕特尔(IEEE CS President Nita Patel)。 2022 I…

Python武器库开发-高级特性篇(九)

高级特性篇(九) 切片 在Python中,切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。普通索引只取出序列中一个下标对应的元素,而切片取出序列中一个范围对应的元素,这里的范围不是狭义上的连续片段。 要创建切片&…

SpringMVC系列-6 异常处理器

背景 本文作为 SpringMVC系列 的第六篇,介绍SpringMVC的异常处理器。内容包括异常处理器的使用方式、实现原理和内置异常处理器的装配过程。 1.使用方式 自定义异常类,用于异常处理器: public class ClientException extends RuntimeExce…