首页 炼丹房 帖子详情
关于SENet的疑惑?
收藏
快速回复
炼丹房 问答头脑风暴 1163 11
关于SENet的疑惑?
收藏
快速回复
炼丹房 问答头脑风暴 1163 11

看到SENet的实现代码,在

global_avgpool = fluid.layers.pool2d(input,pool_type='avg',global_pooling=True)   //全局平均池化
  sq = fluid.layers.fc(global_avgpool,size=num_channels//16,act='relu')    //  压缩

   ex = fluid.layers.fc(sq,size=num_channels,act='sigmoid') //膨胀
   mul = fluid.layers.elementwise_mul(input,ex,axis=0)  // 输入和注意力相乘

有个疑惑?在最后的相乘步骤,用了elementwise_mul  为什么 axis = 0 ? axis = 0不就代表着【n,c,h,w】中的 n 吗? 不应该是在 通道c 的维度相乘吗? axis = 1?

0
收藏
回复
全部评论(11)
时间顺序
trainer
#2 回复于2020-09

如果elementwise_mul的2个输入shape相同,axis参数无用,输出结果总是对应元素相乘的矩阵

0
回复
trainer
#3 回复于2020-09

你的代码没问题,具体的解释发布出去,审核不通过,

可以参考这个,

import paddle
import numpy as np
from paddle.fluid.layers import elementwise_mul


x_v = [[[[1,1],[2,2],[3,3]]],[[[3,3],[2,2],[1,1]]]]
y_v = [[1],[2]]
x_np = np.array(x_v).astype(np.float64)
# x_np = np.ones((2,1,3,2))*2
y_np = np.array(y_v).astype(np.float64)

with paddle.fluid.dygraph.guard():
x = paddle.fluid.dygraph.to_variable(x_np)
y = paddle.fluid.dygraph.to_variable(y_np)
print(x.shape)
print(y.shape)
r = elementwise_mul(x,y,axis=1)
print(r)
print(r.numpy())

0
回复
trainer
#4 回复于2020-09

elementwise_mul的2个输入shape不同时的输出,

文字发不出去,看下图片吧,具体的运行下前面的代码就清楚了

 

 

0
回复
thinc
#5 回复于2020-09

我觉得 @xashagua 解释的很好,axis这种抽象的东西要是让我们自己理解起来会很困难。如果一个二维数组的相加,我们可以很轻松理解;但是四维Tensor按照axis相加的话,我们很难去想相加的两个数据应该输出什么结果

0
回复
thinc
#6 回复于2020-09
trainer #4
elementwise_mul的2个输入shape不同时的输出, 文字发不出去,看下图片吧,具体的运行下前面的代码就清楚了   [图片]  

不过我没弄懂这个axis=1是代表第一维度吗?那第一维度指的是下标为1的数据还是下标为0的数据呢?

0
回复
trainer
#7 回复于2020-09
thinc #6
不过我没弄懂这个axis=1是代表第一维度吗?那第一维度指的是下标为1的数据还是下标为0的数据呢?

1是下标,我习惯称呼第0、1、2、3维度

0
回复
AIStudio810258
#8 回复于2020-09

飞桨的tensor对象,把常用的运算符重载了,加减乘除(点乘)直接用~~

0
回复
AIStudio810258
#9 回复于2020-09

动态图下,我就是直接用,测试结果和用layers下的方法一样

0
回复
AIStudio810258
#10 回复于2020-09

飞桨的函数确实会在某些条件下忽略参数。比如pool时,如果用全局池化,pool size 就被忽略了

0
回复
AIStudio810258
#11 回复于2020-09

详细说明会在函数的文档里注明

0
回复
AIStudio810258
#12 回复于2020-09
飞桨的函数确实会在某些条件下忽略参数。比如pool时,如果用全局池化,pool size 就被忽略了

这样做也是为了方便、自适应吧

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户