首页 Paddle框架 帖子详情
如何理解axis这一参数?
收藏
快速回复
Paddle框架 问答深度学习 2450 19
如何理解axis这一参数?
收藏
快速回复
Paddle框架 问答深度学习 2450 19

在数据分析时,经常会碰到axis这一参数,例如

array = np.arange(2*3).reshape(2, 3)
print("array:\n", array)
# array:
#  [[0 1 2]
#  [3 4 5]]

maximums = array.max(axis=0)
print("maximums:\n", maximums)
# maximums:
#  [3 4 5]

minimums = array.min(axis=1)
print("minimums:\n", minimums)
# minimums:
#  [0 3]

这里axis=0和axis=1可能比较好理解,我们可以看作是按行和按列。但如果是Tensor这种多维的数据,axis就不太好解释成行和列这种名词了,因为我们认知的世界也只有3维。这里再举一个例子,在Paddle中图像都是4维(batch_size, channels, height, width)表示形式,ResNet和DenseNet在每一个block后都有一个concat的操作,他们需要一个参数axis来设置连接的通道

 

那么究竟该如何理解 axis 这一参数呢?

我的理解是,对于2维数组,只需要记住axis=0代表列,axis=1代表行。一般的,2维数组每一行代表一个样本,每一列代表一个特征值

  CRIM(城镇人均犯罪率) PTRATIO(城镇师生比例) ... MEDV (自有住房中位数)
House_1 0.00632 15.3 ... 24.00
House_2 0.02731 17.8 ... 21.60
House_3 0.02729 17.8 ... 34.70

由于不同特征取值范围不一致,就需要对每个特征(每一列)归一化,而列,即每一行,就是axis=1。

 

对于图像这种4维数组理解起来会简单一点,在诸如ResNet和DenseNet网络中都是对通道数(channels)进行element_wise或者concat,而通道数在4个维度中就是第二个,因此axis=1。

# a.shape = (64, 512, 16, 16)
# b.shape = (64, 512, 16, 16)
out = fluid.layers.element_wise(a, b, axis=1)

讲了这么多可能有点乱,最后总结一下。

对于二维数组,axis=0代表列,axis=1代表行!(死记硬背)

对于四位数组,一般用axis=1,即处理通道数

1
收藏
回复
全部评论(19)
时间顺序
AIStudio810260
#2 回复于2020-08

最后还是靠记忆才行,我pandas隔三岔五用一用每次都忘,要么得多debug一两次要么靠搜索……不是说python搜索量现在在所有语言里排第一嘛,估计很多是我这种小白玩家贡献的23333

0
回复
AIStudio810258
#3 回复于2020-08

嗯 有些归一化也要指定这个维度参数

0
回复
AIStudio810258
#4 回复于2020-08
最后还是靠记忆才行,我pandas隔三岔五用一用每次都忘,要么得多debug一两次要么靠搜索……不是说python搜索量现在在所有语言里排第一嘛,估计很多是我这种小白玩家贡献的23333

用惯了ctrl cv 大法,真是啥都没记住,的确得养成手打的习惯

0
回复
AIStudio810258
#5 回复于2020-08

记住了再cv也不迟

0
回复
thinc
#6 回复于2020-08
用惯了ctrl cv 大法,真是啥都没记住,的确得养成手打的习惯

有时候cv的时候看一眼觉得很简单,等自己慢慢看的时候可能被一个小问题困住

0
回复
thinc
#7 回复于2020-08
最后还是靠记忆才行,我pandas隔三岔五用一用每次都忘,要么得多debug一两次要么靠搜索……不是说python搜索量现在在所有语言里排第一嘛,估计很多是我这种小白玩家贡献的23333

小白+1

0
回复
AIStudio810259
#8 回复于2020-08

理解就是拍展还是挤扁

0
回复
thinc
#9 回复于2020-08
理解就是拍展还是挤扁

问号脸

0
回复
七年期限
#10 回复于2020-08

前来观看

0
回复
AIStudio810259
#11 回复于2020-09
thinc #9
问号脸

就是与地板平行还是垂直,选个方向。

0
回复
aaaaaa
#12 回复于2020-09

axis怕搞错,我都会打印一遍看看是不是和自己的想法一样

0
回复
aaaaaa
#13 回复于2020-09

这个参数在高维不好解释

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

我不试图在三维空间用分组的方式感性理解,我直接理解成俄罗斯套娃,哈哈~~

0
回复
thinc
#15 回复于2020-09
aaaaaa #12
axis怕搞错,我都会打印一遍看看是不是和自己的想法一样

大于3维的东西理解起来太难了

0
回复
thinc
#16 回复于2020-09
我不试图在三维空间用分组的方式感性理解,我直接理解成俄罗斯套娃,哈哈~~

不懂就问。。。什么是俄罗斯套娃

0
回复
七年期限
#17 回复于2020-09
thinc #16
不懂就问。。。什么是俄罗斯套娃

俄罗斯套娃是啥

0
回复
thinc
#18 回复于2020-10
俄罗斯套娃是啥

别问我啊,,问“彩虹风车”大佬

0
回复
3
337954205
#19 回复于2020-10

参考一个数学上的概念 “张量” (不是麻辣烫)

零维张量是数

一维张量是向量

二维张量是矩阵

三维张量的典型是彩色数字图像(实际就是代表R G B 三种颜色光强的三个矩阵,当把三个矩阵放在一起很自然的就出现了 第三维)

四维张量就是神经网络最常出现的东西,四维张量从图像的角度 就是多张彩色图像(其实黑白也一样),第四维就是图像的数量

 

axis就是对于维数的索引了 当然死记硬背其实也挺简单的 

0
回复
thinc
#20 回复于2020-10
337954205 #19
参考一个数学上的概念 “张量” (不是麻辣烫) 零维张量是数 一维张量是向量 二维张量是矩阵 三维张量的典型是彩色数字图像(实际就是代表R G B 三种颜色光强的三个矩阵,当把三个矩阵放在一起很自然的就出现了 第三维) 四维张量就是神经网络最常出现的东西,四维张量从图像的角度 就是多张彩色图像(其实黑白也一样),第四维就是图像的数量   axis就是对于维数的索引了 当然死记硬背其实也挺简单的 
展开

多维确实是这么理解的

0
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户