张量的分割
TensorFlow中,张量分割的操作主要包括:
tf.unstack():将张量按照特定维度分解。
tf.split():将张量按照特定维度划分为指定的分数。
与tf.unstack()相比,tf.split()更佳灵活。
tf.unstack(value,num=None,axis=0,name='unstack'):
value:输入张量;
num:表示输出含有num个元素的列表,num必须和指定维度内元素的个数相等。通常可以忽略不写这个参数。
axis:指明根据数据的哪个维度进行分割;
name:操作名称。
代码:
按照第一个维度对数据进行分解,分解后的数据以列表形式输出。
tf.unstack(stacked_sample_1,axis=0)
输出:
[<tf.Tensor: shape=(100, 100, 3), dtype=float32, numpy=
array([[[ 0.0665694 , 0.7110351 , 1.907618 ],
[ 0.84416866, 1.5470593 , -0.5084871 ],
[-1.9480026 , -0.9899087 , -0.09975405],
...,
tf.split(value, num_or_size_splits, axis=0):
value:输入张量;
num_or_size_splits:准备切成几份
axis:指明根据数据的哪个维度进行分割。
tf.split()的分割方式有两种:
- 如果num_or_size_splits 传入的是一个整数,那直接在axis=D这个维度上把张量平均切分成几个小张量。
- 如果num_or_size_splits 传入的是一个向量,则在axis=D这个维度上把张量按照向量的元素值切分成几个小张量。
代码:
import numpy as np
split_sample_1 = tf.random.normal([10,100,100,3])
print("原始数据的尺寸为:",split_sample_1.shape)
splited_sample_1 = tf.split(split_sample_1, num_or_size_splits=5,axis=0)
print("当m_or_size_splits=10,分割后数据的尺寸为:",np.shape(splited_sample_1))
splited_sample_2 = tf.split(split_sample_1, num_or_size_splits=[3,5,2],axis=0)
print("当num_or_size_splits=[3,5,2],分割后数据的尺寸分别为:",
np.shape(splited_sample_2[0]),
np.shape(splited_sample_2[1]),
np.shape(splited_sample_2[2]))
输出:
原始数据的尺寸为: (10, 100, 100, 3)
当m_or_size_splits=10,分割后数据的尺寸为: (5, 2, 100, 100, 3)
当num_or_size_splits=[3,5,2],分割后数据的尺寸分别为: (3, 100, 100, 3) (5, 100, 100, 3) (2, 100, 100, 3)