gpt4 book ai didi

python - NumPy Array Reshaped 但如何更改轴以进行池化?

转载 作者:太空宇宙 更新时间:2023-11-04 10:04:17 25 4
gpt4 key购买 nike

我有一个 8x8 矩阵如下:

[[ 0.3  0.3  0.3  0.3  0.3  0.5  0.1 -0.1]
[ 0.1 0.1 -0.1 0.3 0.3 -0.1 -0.1 -0.5]
[-0.1 0.1 0.3 -0.1 0.3 -0.1 -0.1 -0.1]
[-0.1 0.1 0.5 0.3 -0.3 -0.1 -0.3 -0.1]
[ 0.5 0.1 -0.1 0.1 -0.1 -0.1 -0.3 -0.5]
[ 0.1 -0.1 -0.3 -0.5 -0.5 -0.1 -0.1 -0.3]
[-0.5 -0.3 -0.3 -0.3 -0.1 -0.5 -0.1 -0.3]
[-0.3 -0.3 -0.3 -0.3 -0.1 -0.1 -0.5 -0.3]]

我的窗口是 2x2。我想要做的是将四个数字(向上和向下数字)放在一起进行汇集。示例输出如下所示:

    [[0.3 0.3
0.1 0.1]

[0.3 0.3
-0.1 0.3]
.......
.......
[-0.1 -0.3
-0.5 -0.3]]

我使用的是 print arr.reshape(16,2,2) 我无法理解的是如何为这个要求设置轴。我的输出是:

[[[ 0.3  0.3]
[ 0.3 0.3]]

[[ 0.3 0.1]
[ 0.5 -0.1]]

[[ 0.1 -0.1]
[ 0.1 0.3]]

[[ 0.3 -0.1]
[-0.1 -0.5]]

[[-0.1 0.3]
[ 0.1 -0.1]]

[[ 0.3 -0.1]
[-0.1 -0.1]]

[[-0.1 0.5]
[ 0.1 0.3]]

[[-0.3 -0.3]
[-0.1 -0.1]]

[[ 0.5 -0.1]
[ 0.1 0.1]]

[[-0.1 -0.3]
[-0.1 -0.5]]

[[ 0.1 -0.3]
[-0.1 -0.5]]

[[-0.5 -0.1]
[-0.1 -0.3]]

[[-0.5 -0.3]
[-0.3 -0.3]]

[[-0.1 -0.1]
[-0.5 -0.3]]

[[-0.3 -0.3]
[-0.3 -0.3]]

[[-0.1 -0.5]
[-0.1 -0.3]]]

请解释在这种情况下如何应用轴。或者,如果他们是获得最大池化的更好方法,请提及。

注意:所有这些都是为了最大池化。我在 python 上使用 NumPy、SciPy。

最佳答案

arr.reshape((4, 2, 4, 2)).transpose((0, 2, 1, 3)).reshape((16, 2, 2))

做你想做的事?

编辑:一点解释:第一个 reshape 将 x 轴和 y 轴分别切成 4 个 block ,每 block 2 个。这几乎就是您要的,只有 block 在轴 1 和 3 上,而不是在轴上二。这就是转置的用武之地。它是数学中矩阵转置(交换轴 0 和 1)到任意维度的直接概括。参数 (0, 2, 1, 3) 要求它保留第 0 个和最后一个轴并交换轴 1 和 2。

此时形状为(4, 4, 2, 2)。所以最后的 reshape 使前两个轴变平。如果您可以使用 2 x 2 的 4 x 4 block ,那么实际上建议不要进行第二次 reshape ,因为与前两个操作相比,它的计算量很大。

这是因为转置创建了一个不连续的数组。现在,连续数组和非连续数组之间的一个区别是, reshape 连续数组的成本几乎为零,而 reshape 非连续数组通常会强制复制。

关于python - NumPy Array Reshaped 但如何更改轴以进行池化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41813722/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com