如何理解Numpy中多维数组的转置

本文详细解析了卷积神经网络中输入信号与卷积核的运算过程,并通过具体数值模拟了运算结果,最终展示了输出张量的形成过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

假设卷积神经网络的输入信号x.shape=(1,3,6,6):表示 1个3通道的分辨率为6*6的图片。

卷积核w.shape=(2,3,3,3):表示2个3通道的3*3的卷积核。

以下直接用多维数组ma来模拟w, x展开成矩阵后相乘的结果,其shape=(16,2)。

ma = np.arange(32).reshape(1,4,4,2)
[
    [
        [
            [ 0,  1],
            [ 2,  3],
            [ 4,  5],
            [ 6,  7]
        ],

        [
            [ 8,  9],
            [10, 11],
            [12, 13],
            [14, 15]
        ],

        [
            [16, 17],
            [18, 19],
            [20, 21],
            [22, 23]
        ],

        [
            [24, 25],
            [26, 27],
            [28, 29],
            [30, 31]
        ]
    ]
]

其实际输出应求转置:

out = ma.transpose(0,3,1,2)

 可将其理解为两次转置的叠加:(0,1,2,3)->(0,3,2,1)->(0,3,1,2)

1. 第1维与第3维转置:第一维是(0,8,16,24)的方向,第三维是(0,1)的方向。转置之后为:

[
    [
        [
            [ 0,  8, 16, 24],
            [ 2, 10, 18, 26],
            [ 4, 12, 20, 28],
            [ 6, 14, 22, 30]
        ],

        [
            [ 1,  9, 17, 25],
            [ 3, 11, 19, 27],
            [ 5, 13, 21, 29],
            [ 7, 15, 23, 31]]
        ]
    ]
]

2.第二维与第三维转置:第二维是(0,2,4,6)的方向。当前的第三维是(0,8,16,24)的方向。转置之后为:

[
    [
        [
            [ 0,  2,  4,  6],
            [ 8, 10, 12, 14],
            [16, 18, 20, 22],
            [24, 26, 28, 30]
        ],

        [
            [ 1,  3,  5,  7],
            [ 9, 11, 13, 15],
            [17, 19, 21, 23],
            [25, 27, 29, 31]
        ]
    ]
]

可结合下面的手绘图来理解: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值