WeightNet之Rethinking
时间:2022-07-22
本文章向大家介绍WeightNet之Rethinking,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
笔者昨天针对WeightNet一文进行了Rethinking,但是理解不够深入,可能对不少同学造成了误导,深表歉意。笔者今天与WeightNet一作就其中的一些疑惑点进行了讨论,在此将关于WeightNet的思考记录如下。
WeightNet
我们还是先看一下WeightNet的结构,见下图。它包含两个分支:(1)一个分支用于卷积权值预测;(2)一个分支类似Identity。将两个分支按照Convolution方式进行融合。
SENet
在SENet一文中,SE模块它一般置于卷积之后,而WeightNet也是进行了类似的桥接。笔者简单绘制了下图这样的桥接,左图为Conv+SE,右图为桥接变换后等价的WeightNet。看上去这两个是等价的,WeightNet是将Attention并入到前接的卷积权值中,从这个角度来看,笔者也认为两者是等价的。
在实现过程中,有两种形式可以完成上述转换(文章后面有code层面的解析说明,WeightNet采用的是隐式融合,笔者是按照显式方式进行思考,角度的不同导致了理解上的偏差):
CondConv
接下来,我们再来看一下CondConv与WeightNet的之间的关联性吧。从笔者的角度来看,它采用了“三个臭皮匠顶个诸葛亮”的思想,通过注意力机制自适应融合权值。
B, Ci, Co, H, W, k = 4, 32, 64, 16, 16, 3
inputs = torch.randn(B, Ci, H, W)
inputs = inputs.view(1, -1, H, W)
attention = torch.randn(B, Co, 1, 1, 1)
weight = torch.randn(Co, Ci, k, k)
weight = weight.unsqueeze(0)
weight = attention * weight
weight = weight.view(B * Co, Ci, k, k)
output = F.conv2d(inputs, weight, padding=1, groups=4)
output = output.view(B, Co, H, W)
print(output.size())
关于WeightNet的解读与分析到底结束。对WeightNet感兴趣的同学可以在下方留言一起讨论。
- 如何在CDH集群安装Anaconda&搭建Python私有源
- 如何使用Python Impyla客户端连接Hive和Impala
- 如何在Windows Server2008搭建DNS服务并配置泛域名解析
- 如何通过CM API优雅的获取元数据库密码
- CM启动报InnoDB engine not found分析
- 如何在Hue中使用Sentry
- 如何在Redhat中配置R环境
- 如何在Redhat中安装R的包及搭建R的私有源
- 什么是sparklyr
- 如何利用Dnsmasq构建小型集群的本地DNS服务器
- Cloudera Labs中的Phoenix
- 如何在CDH中使用Phoenix
- Java 8 时间 API 快速入门
- 如何在CDH中使用HPLSQL实现存储过程
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法