张量拼接函数tf.stack()与张量分解函数tf.unstack()

1、tf.stack(values, axis=0, name=’stack’)

以指定的轴axis,将一个维度为R的张量数组转变成一个维度为R+1的张量。即将一组张量以指定的轴,提高一个维度。

参数:
values: 一个有相同形状与数据类型的张量数组。
axis: 以轴axis为中心来转变的整数。默认是第一个维度即axis=0。支持负数。取值范围为[-(R+1), R+1)
name: 这个操作的名字(可选)
返回:被提高一个维度后的张量
异常: ValueError: 如果轴axis超出范围[-(R+1), R+1)。

假设要转变的张量数组values的长度为N,其中的每个张量的形状为(A, B, C)。
如果轴axis=0,则转变后的张量的形状为(N, A, B, C)。
如果轴axis=1,则转变后的张量的形状为(A, N, B, C)。
如果轴axis=2,则转变后的张量的形状为(A, B, N, C)。其它情况依次类推。

import tensorflow as tf
a1=tf.constant([1,2,3])
a2=tf.constant([4,5,6])
c1=tf.stack([a1,a2],axis=0)
c2=tf.stack([a1,a2],axis=1)
with tf.Session() as sess:
    print("c1:{}  c2:{}".format(sess.run(c1),sess.run(c2)))

输出:

c1:[[1 2 3]
 [4 5 6]]
c2:[[1 4]
 [2 5]
 [3 6]]

2、tf.unstack(value, num=None, axis=0, name=’unstack’)
以指定的轴axis,将一个维度为R的张量数组转变成一个维度为R-1的张量。即将一组张量以指定的轴,减少一个维度。正好和stack()相反。

参数:
value: 一个将要被降维的维度大于0的张量。
num: 整数。指定的维度axis的长度。如果设置为None(默认值),将自动求值。
axis: 整数.以轴axis指定的维度来转变 默认是第一个维度即axis=0。支持负数。取值范围为[-R, R)
name: 这个操作的名字(可选)
返回:
从张量value降维后的张量数组。
异常:
ValueError: 如果num没有指定并且无法求出来。
ValueError: 如果axis超出范围 [-R, R)。

import tensorflow as tf
a1=tf.constant([1,2,3])
a2=tf.constant([4,5,6])
c1=tf.stack([a1,a2],axis=0)
c2=tf.stack([a1,a2],axis=1)
d=tf.unstack(c1,axis=0)
e=tf.unstack(c1,axis=1)
with tf.Session() as sess:
    print(sess.run(d)) 
    print(sess.run(e))

输出:

[array([1, 2, 3]), array([4, 5, 6])]
[array([1, 4]), array([2, 5]), array([3, 6])]

你可能感兴趣的:(tensorflow)