在Tensorflow中进行压缩和重塑

时间:2018-02-20 12:23:58

标签: python tensorflow

问题:

我们说我有两个张量,ab。两者都具有相同的形状:[?, 10, 4096]

如何以这样的方式拉伸两者:结果张量的形状为[?,20,4096],,以便 ith 元素a位于b ith 元素之前。

列表示例:

a = [1, 3, 5]
b = [2, 4, 6]

现在我想要一个看起来像[1, 2, 3, 4, 5, 6]而不是 [1, 3, 5, 2, 4, 6]的张量,如果我tf.stack两个然后会发生这种情况会发生什么使用tf.reshape,对吗?

或者也许是一个更普遍的问题,你怎么知道tf.reshape重塑张量的顺序是什么?

1 个答案:

答案 0 :(得分:1)

首先看起来,堆叠然后重塑完成工作:

import tensorflow as tf
a = tf.constant([1, 3, 5])
b = tf.constant([2, 4, 6])
c = tf.stack([a, b], axis = 1)
d = tf.reshape(c, (-1,)) 
with tf.Session() as sess:    
     print(sess.run(c))  # [[1 2],[3 4],[5 6]]
     print(sess.run(d))  # [1 2 3 4 5 6]

要回答第二个问题,TensorFlow reshape操作使用与numpy默认订单相同的订单,a.k.a C订单,引自here

  

使用此索引顺序读取a的元素,并使用此索引顺序将元素放入重新整形的数组中。 'C'表示使用类似C的索引顺序读取/写入元素,最后一个轴索引变化最快,返回到第一个轴索引变化最慢。

import numpy as np
a = np.array([1, 3, 5])
b = np.array([2, 4, 6])
c = np.stack([a, b], axis=1)
c.reshape((-1,), order='C')  # array([1, 2, 3, 4, 5, 6])