如何理解axis这一参数?
收藏
在数据分析时,经常会碰到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
收藏
请登录后评论
最后还是靠记忆才行,我pandas隔三岔五用一用每次都忘,要么得多debug一两次要么靠搜索……不是说python搜索量现在在所有语言里排第一嘛,估计很多是我这种小白玩家贡献的23333
嗯 有些归一化也要指定这个维度参数
用惯了ctrl cv 大法,真是啥都没记住,的确得养成手打的习惯
记住了再cv也不迟
有时候cv的时候看一眼觉得很简单,等自己慢慢看的时候可能被一个小问题困住
小白+1
理解就是拍展还是挤扁
问号脸
前来观看
就是与地板平行还是垂直,选个方向。
axis怕搞错,我都会打印一遍看看是不是和自己的想法一样
这个参数在高维不好解释
我不试图在三维空间用分组的方式感性理解,我直接理解成俄罗斯套娃,哈哈~~
大于3维的东西理解起来太难了
不懂就问。。。什么是俄罗斯套娃
俄罗斯套娃是啥
别问我啊,,问“彩虹风车”大佬
参考一个数学上的概念 “张量” (不是麻辣烫)
零维张量是数
一维张量是向量
二维张量是矩阵
三维张量的典型是彩色数字图像(实际就是代表R G B 三种颜色光强的三个矩阵,当把三个矩阵放在一起很自然的就出现了 第三维)
四维张量就是神经网络最常出现的东西,四维张量从图像的角度 就是多张彩色图像(其实黑白也一样),第四维就是图像的数量
axis就是对于维数的索引了 当然死记硬背其实也挺简单的
多维确实是这么理解的