tensorflow stack unstack操作

Posted bitcarmanlee

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了tensorflow stack unstack操作相关的知识,希望对你有一定的参考价值。

1.stack操作

先看一下tensorflow中stack方法的函数签名

@tf_export("stack")
@dispatch.add_dispatch_support
def stack(values, axis=0, name="stack"):
  """Stacks a list of rank-`R` tensors into one rank-`(R+1)` tensor.

  See also `tf.concat`, `tf.tile`, `tf.repeat`.

  Packs the list of tensors in `values` into a tensor with rank one higher than
  each tensor in `values`, by packing them along the `axis` dimension.
  Given a list of length `N` of tensors of shape `(A, B, C)`;

  if `axis == 0` then the `output` tensor will have the shape `(N, A, B, C)`.
  if `axis == 1` then the `output` tensor will have the shape `(A, N, B, C)`.
  Etc.
  .......

stack操作是将一组秩为R的tensor叠成一个秩为R+1的tensor。

def stack_operation():
    x = tf.constant([1, 4])
    y = tf.constant([2, 5])
    z = tf.constant([3, 6])
    s1 = tf.stack([x, y, z])
    print(s1)
    s2 = tf.stack([x, y, z], axis=1)
    print(s2)

代码输出为:

tf.Tensor(
[[1 4]
 [2 5]
 [3 6]], shape=(3, 2), dtype=int32)
tf.Tensor(
[[1 2 3]
 [4 5 6]], shape=(2, 3), dtype=int32)

其中,axis指定为对哪个维度进行操作。如果axis=0,改变的则是最外层的维度,以此类推。

2.unstack

理解了上面的stack操作,unstack就好理解了,就是stack的逆操作。

def unstack_operation():
    s = tf.constant([[1, 2, 3], [4, 5, 6]])
    a = tf.unstack(s, axis=0)
    b = tf.unstack(s, axis=1)
    print(a)
    print(b)
[<tf.Tensor: shape=(3,), dtype=int32, numpy=array([1, 2, 3], dtype=int32)>, <tf.Tensor: shape=(3,), dtype=int32, numpy=array([4, 5, 6], dtype=int32)>]
[<tf.Tensor: shape=(2,), dtype=int32, numpy=array([1, 4], dtype=int32)>, <tf.Tensor: shape=(2,), dtype=int32, numpy=array([2, 5], dtype=int32)>, <tf.Tensor: shape=(2,), dtype=int32, numpy=array([3, 6], dtype=int32)>]

以上是关于tensorflow stack unstack操作的主要内容,如果未能解决你的问题,请参考以下文章

python pandas stack和unstack函数

pandas stack和unstack函数

图解pandas的轴旋转函数:stack和unstack

stack,unstack,groupby,pivot_table的区别

TensorFlow之tf.unstack学习循环神经网络中用到!

pandas使用stack函数map函数unstack函数以及字典同时替换dataframe多个数据列的内容