【TensorFlow】tf.transpose()详解

本文详细解读了TensorFlow中transpose函数的用法,通过实例演示如何根据不同维度的张量设置perm参数实现转置,包括2D、3D乃至各层维数不同的情况,并展示了perm在多维度转换中的灵活性。
摘要由CSDN通过智能技术生成

官方API文档:

transpose(
    a,                      #  输入张量
    perm=None,              # 转置规则,后面详细介绍
    name='transpose'
)

Args:
a: A Tensor.
perm: A permutation of the dimensions of a.
name: A name for the operation (optional).
Returns:
A transposed Tensor.

看一下官方给出的例子:
原本张量x维度:2*3,转置后为3*2,使用perm时候,参数列表表示张量从外向里的一维,0表示最外层,1表示从外向里的第1层,由于x这个张量只有两层,设置perm=[1, 0]就相当于将原本的2*3转为3*2:

# 'x' is [[1 2 3]
#         [4 5 6]]
tf.transpose(x) ==> [[1 4]
                     [2 5]
                     [3 6]]

# Equivalently
tf.transpose(x, perm=[1, 0]) ==> [[1 4]
                                  [2 5]
                                  [3 6]]

如果张量维数大于2,perm这个参数作用就更明显了:输入张量x的维度是2*2*3,perm=[0, 2, 1],相当于转化为2*3*2,最外层那维不变,内两维转置:

# 'perm' is more useful for n-dimensional tensors, for n > 2
# 'x' is   [[[1  2  3]
#            [4  5  6]]
#           [[7  8  9]
#            [10 11 12]]]
# Take the transpose of the matrices in dimension-0
tf.transpose(x, perm=[0, 2, 1]) ==> [[[1  4]
                                      [2  5]
                                      [3  6]]

                                     [[7 10]
                                      [8 11]
                                      [9 12]]]

再一般化些,如果输入x的各层维数都不同:

x = [
    [
        [1, 2, 3, 4],
        [5, 6, 7, 8],
        [9, 10, 11, 12]
    ],
    [
        [13, 14, 15, 16],
        [17, 18, 19, 20],
        [21, 22, 23, 24]
    ]
]
# 输入x的维数为:2*3*4
output1=tf.transpose(x, perm=[1,0,2]) # 转置后,维数为:3*2*4
output1=
[
  [
     [ 1  2  3  4]
     [13 14 15 16]
 ]
 [
    [ 5  6  7  8]
    [17 18 19 20]
  ]
  [
     [ 9 10 11 12]
     [21 22 23 24]
  ]
]

output2=tf.transpose(x, perm=[0,2,1]) # 转置后,维数为:2*4*3
output2=
[
  [
      [ 1  5  9]
      [ 2  6 10]
      [ 3  7 11]
      [ 4  8 12]
  ]
  [
     [13 17 21]
     [14 18 22]
     [15 19 23]
     [16 20 24]
  ]
]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值