[TOC]

概述

改变张量形状

删除维度

image-20210718230938755

交换维度

image-20210718231035812

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# 交换维度
# tf.transpose(input,perm)

x=tf.constant([[1,2,3],[4,5,6]])
x
# 从输出我们可以看到张量x是一个2行3列的二维数组

tf.transpose(x)
# 从日志我们可以看到。交换维度之后,原来2行3列的二维数组。
# 变成3行2列的二维数组了。


# 第二个参数:perm
# 可以通过第二个参数调整轴的顺序.相当于我们交换了第0个轴和第一个轴的顺序
# 也相当于发生了转置
a = tf.transpose(x,perm=[1,0])
a
# <tf.Tensor: shape=(3, 2), dtype=int32, numpy=
# array([[1, 4],
# [2, 5],
# [3, 6]], dtype=int32)>

# 我们继续看一下三维数组例子
# 长度为24的一维张量(矩阵)
b = tf.range(24)
b
# <tf.Tensor: shape=(24,), dtype=int32, numpy=
# array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
# 17, 18, 19, 20, 21, 22, 23], dtype=int32)>
# 进行维度变换为三维矩阵
#三位矩阵:2层、3行、4列
c=tf.reshape(b,[2,3,4])
c

# 第二个参数:perm
# 可以通过第二个参数调整轴的顺序.相当于我们交换了第0个轴和第一个轴的顺序
tf.transpose(c,(1,0,2))
'''
<tf.Tensor: shape=(3, 2, 4), dtype=int32, numpy=
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],

[[ 4, 5, 6, 7],
[16, 17, 18, 19]],

[[ 8, 9, 10, 11],
[20, 21, 22, 23]]], dtype=int32)>
'''
# 交换维度,不仅改变了张量的视图、也改变了张量的存储顺序

张量拼接和分隔

image-20210718233244387

image-20210718233713198

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
32
33
34
35
36
37
38
39
40
41
# 分割张量
# 分割张量:就是将一个张量拆分成多个张量。分割后的张量维度不变
# tf.split(value,nums,axis=0)
# nums 为一个整数时,为等分割成nums个常量
# nums为一个列表时候,就表示不等分割成列表长度的张量。如:[1,2,1] 表示分割成是三个张量,长度分别为1,2,3
x = tf.range(24)
x = tf.reshape(x,[4,6])
x

tf.split(x,2,0)
# 分割完成之后,就是两个2行6列的矩阵张量

# 我们不等分割成三个张量
tf.split(x,[1,2,1],0)
'''
[<tf.Tensor: shape=(1, 6), dtype=int32, numpy=array([[0, 1, 2, 3, 4, 5]], dtype=int32)>,
<tf.Tensor: shape=(2, 6), dtype=int32, numpy=
array([[ 6, 7, 8, 9, 10, 11],
[12, 13, 14, 15, 16, 17]], dtype=int32)>,
<tf.Tensor: shape=(1, 6), dtype=int32, numpy=array([[18, 19, 20, 21, 22, 23]], dtype=int32)>]
'''

tf.split(x,[1,4,1],1)
'''
[<tf.Tensor: shape=(4, 1), dtype=int32, numpy=
array([[ 0],
[ 6],
[12],
[18]], dtype=int32)>,
<tf.Tensor: shape=(4, 4), dtype=int32, numpy=
array([[ 1, 2, 3, 4],
[ 7, 8, 9, 10],
[13, 14, 15, 16],
[19, 20, 21, 22]], dtype=int32)>,
<tf.Tensor: shape=(4, 1), dtype=int32, numpy=
array([[ 5],
[11],
[17],
[23]], dtype=int32)>]
'''
# 张量的分割和拼接,改变了张量的视图,但是张量的存储顺序并没有发生改变

堆叠和分解

image-20210718234608330

image-20210718234650802