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

最低0.47元/天 解锁文章
3640

被折叠的 条评论
为什么被折叠?



