2

我有一个张量,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仅在运行时已知。

4

2 回答 2

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)

我在初始化后得到变量的形状,然后再使用它。还要看看这个答案,因为它处理类似的事情。

于 2015-11-14T06:43:31.990 回答
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()
于 2015-11-15T07:09:23.303 回答