用标量张量重塑TensorFlow中的张量

时间:2015-11-14 05:22:20

标签: python reshape tensorflow

我有张量X的形状(T, n, k)

如果我事先知道了形状,很容易重塑,tf.reshape(X, (T * n, k)) T, n, k是整数,而不是张量。但如果我不了解形状,有没有办法做到这一点。似乎获得像shape = tf.shape(X)这样的形状并重塑它们并不起作用。也就是说,

tf.reshape(X, (tf.shape[0] * tf.shape[1], tf.shape[2]))

有什么想法吗?在我的应用程序中,Tk在运行时之前是已知的,但n仅在运行时已知。

2 个答案:

答案 0 :(得分:5)

看看这个:

import tensorflow as tf

a, b, c = 2, 3, 4
x = tf.Variable(tf.random_normal([a, b, c], mean=0.0, stddev=1.0, dtype=tf.float32))
s = tf.shape(x)

init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
v1, v2, v3 = sess.run(s)
y = tf.reshape(x, [v1 * v2, v3])
shape = tf.shape(y)

print sess.run(y)
print sess.run(shape)

我在初始化之后得到变量的形状,然后再使用它。另请查看this answer,因为它会处理类似的事情。

答案 1 :(得分:2)

现在你告诉你使用占位符来填充数据,它开始有意义了。以下是在这种情况下如何重塑数据的示例:

import tensorflow as tf
import numpy as np
data = np.random.rand(2, 3, 4)

x = tf.placeholder("float", None)
s = tf.shape(x)

sess = tf.Session()
shape_original = sess.run(s, feed_dict={x: data})

x_ = tf.reshape(x, [shape_original[0] * shape_original[1], shape_original[2]])
s_ = tf.shape(x_)

shape_now = sess.run(s_, feed_dict={x: data})
print 'Original\t', shape_original
print 'Now\t\t\t', shape_now

sess.close()