tf.slice(input,begin,size,name = None),该函数对输入的数据input进行切片分割操作。其中,参数begin是一个int32或int64类型的tensor,表示的是每一个维度的起始位置。size也是一个int32或int64类型的tensor,表示的是每个维度要取的元素个数。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array = [[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]],
[[13,14,15],[16,17,18]]]
with tf.Session() as sess:
print(sess.run(tf.shape(array)))
print(sess.run(tf.slice(array,[1,0,0],[1,1,3])))
如果size输入的值是-1的话,对应那个维度上剩下的数都会被取走。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array = [[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]],
[[13,14,15],[16,17,18]]]
with tf.Session() as sess:
print(sess.run(tf.shape(array)))
print(sess.run(tf.slice(array,[1,0,0],[1,-1,3])))
tf.split(value,num_or_size_splits,axis = 0,num = None,name = 'split'),该函数是用来切割张量的。它共有五个参数,其中value为需要切分的张量,num_or_size_splits为准备切分成的份数。axis用来指定在第几个维度上进行切割。
由于num_or_size_splits传入的值会不同,分割方式共分为两种:
1、如果num_or_size_splits传入的是一个整数,直接在axis指定的维度上把张量平均切分成几个小张量。axis数值代表的维度从0开始技术。
2、如果num_or_size_splits传入的是一个向量,则在axis指定的维度上根据这个向量把元素切分为几项。这里需要注意,传入向量中各个元素的和要跟原本这个向量对应维度的数值相等。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array = [[[1,2,3],[4,5,6]],
[[7,8,9],[10,11,12]],
[[13,14,15],[16,17,18]]]
a = tf.split(array,3,0)
b = tf.split(array,[2,1,0])
with tf.Session() as sess:
print(sess.run(tf.shape(array)))
print("----------------------------------------------")
print(sess.run(a[1]))
print("----------------------------------------------")
print(sess.run(b[0]))
print("----------------------------------------------")
print(sess.run(b[1]))
print("----------------------------------------------")
print(sess.run(b[2]))
tf.concat(values,axis,name = 'concat'),该函数用来把输入的向量沿着某一维度连接,其中axis用来指定在第几个维度上进行连接,参数values是输入的值。当axis = 0时,代表在第0个维度拼接。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array1 = [1,2,3]
array2 = [4,5,6]
array3 = [[1,2,3],[4,5,6]]
array4 = [[7,8,9],[10,11,12]]
a = tf.concat([array1,array2],0)
b = tf.concat([array3,array4],0)
c = tf.concat([array3,array4],1)
with tf.Session() as sess:
print(sess.run(a))
print("----------------------------------------------")
print(sess.run(b))
print("----------------------------------------------")
print(sess.run(c))
tf.stack(input,axis = 0),该函数用于将两个N维张量列表沿着axis轴组合成一个N+1维的张量。其中input为输入的张量列表,axis用来指定在第几个维度上进行组合,默认为0。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array1 = [1,2,3]
array2 = [4,5,6]
array3 = [[1,2,3],[4,5,6]]
array4 = [[7,8,9],[10,11,12]]
a = tf.stack([array1,array2],0)
a1 = tf.stack([array1,array2],1)
b = tf.stack([array3,array4],0)
c = tf.stack([array3,array4],1)
d = tf.stack([array3,array4],2)
with tf.Session() as sess:
print(sess.run(a))
print("----------------------------------------------")
print(sess.run(a1))
print("----------------------------------------------")
print(sess.run(b))
print("----------------------------------------------")
print(sess.run(c))
print("----------------------------------------------")
print(sess.run(d))
tf.unstack(input,num = None,axis = 0,name = 'unstack'),该函数用于将输入的input按照指定的行或列进行拆分,并输出含有num个元素的列表。axis = 0,表示按行拆分;axis = 1,表示按列拆分。num为输出list的个数,必须与预计输出的个数相等,否则会报错。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array1 = [[1,2,3],[4,5,6]]
a = tf.unstack(array1)
a1 = tf.unstack(array1,2)
a2 = tf.unstack(array1,3,1)
with tf.Session() as sess:
print(sess.run(tf.shape(array1)))
print("----------------------------------------------")
print(sess.run(a))
print("----------------------------------------------")
print(sess.run(a1))
print("----------------------------------------------")
print(sess.run(a2))
tf.gather(params,indices,validate_indices = None,name = None),该函数根据参数indices的值,从输入的params中按照axis维获取切片。
示例代码如下:
import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()
array1 = [1,2,3,4,5,6,7,8,9]
array2 = [[1,2,3],[4,5,6]]
a = tf.gather(array1,[5,2,3,3,1])
b = tf.gather(array2,[1,0,1])
with tf.Session() as sess:
print(sess.run(a))
print("----------------------------------------------")
print(sess.run(b))