我有张量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]))
有什么想法吗?在我的应用程序中,T
和k
在运行时之前是已知的,但n
仅在运行时已知。
答案 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()