TensorFlow 2.0 | Tensor的维度变换整理

 

目录

1. 张量变形(reshape)

2. 维度增减

2.1 维度增加(expand_dims)

2.2 维度删除(squeeze)

3. 维度交换(transpose)

4. 张量合并

4.1 张量拼接(concat)

4.2 张量堆叠(stack)

5. 张量分割(split)


神经网络搭建过程中,维度变换是最重要的操作之一,通过切换数据形式,从而满足不同场景的运算需求。本文对所有维度处理的方式进行了整理。

1. 张量变形(reshape)

在总数据量不变的情况下,将其变换为不同的组合形式,且将此数据平铺时排列顺序不改变

举个例子:

>>> import tensorflow as tf
>>> x = tf.range(24)	# 生成一组连续整数向量
>>> x = tf.reshape(x, [2, 3, 4])	# 改变x的视图,得到3D张量
>>> x
<tf.Tensor: id=11, shape=(2, 3, 4), 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]]])>
>>> y = tf.reshape(x, [3, 2, 2, 2])    # 将x变形为4D张量
>>> y
<tf.Tensor: id=13, shape=(3, 2, 2, 2), 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]]]])>

数据在创建时按着初始的维度顺序写入,改变张量的视图仅仅是改变了张量的理解方式,并不需要改变张量的存储顺序,张量只需要满足新视图的元素总量与存储区域大小相等即可

像上面:2∗3∗4=3∗2∗2∗22*3*4 = 3*2*2*22∗3∗4=3∗2∗2∗2,总量没变;且张量的存储顺序始终没有改变,数据仍是按照0,1,2,...,230,1,2,...,230,1,2,...,23的顺序保存

 

2. 维度增减

2.1 维度增加(expand_dims)

增加一个长度为 1 的维度相当于给原有的数据添加一个新维度的概念,因为维度长度为 1,所以数据并没有改变

举个例子:

>>> x = tf.random.normal([5, 5])	# 建立正态随机数据
>>> x
<tf.Tensor: id=19, shape=(5, 5), dtype=float32, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值