使用tf.shape会导致错误

时间:2018-02-28 08:02:23

标签: tensorflow

我在TensorFlow中有以下简单代码:

a = tf.placeholder(dtype = tf.float64, shape = (3, None))
b = tf.Variable(dtype = tf.float64, initial_value = np.random.randn(5, 3))
c = tf.matmul(b, a)
size = tf.shape(a)
t1, t2 = size

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    res = sess.run(size, feed_dict = {a: np.random.randn(3, 4)})

t1

但它不起作用。我希望得到张量的形状,a.shape工作得很好但重点是第二维得到None。我搜索并知道它的值我必须使用tf.shape(a),但现在问题是我搜索并发现python确实知道张量对象中的内容。我只想检索两个变量中的值。关键是我必须在更复杂的代码中使用此代码,这些大小是更大计算的边缘部分。反正有没有将这些数字作为整数而不分别为它们运行会话?

我不得不说我知道我的代码的下列变种:

a = tf.placeholder(dtype = tf.float64, shape = (3, None))
b = tf.Variable(dtype = tf.float64, initial_value = np.random.randn(5, 3))
c = tf.matmul(b, a)
size = a.shape.as_list()
print(type(size))

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    res = sess.run(c, feed_dict = {a: np.random.randn(3, 4)})
    print(res)
    print(size)

但它得到None作为形状的第二个元素。因此,我必须使用tf.shape。那些坚持认为我的问题是重复的人,我运行了建议here并获得了以下结果,其中仍包含None

  

(3,?)

1 个答案:

答案 0 :(得分:0)

这有帮助吗?它并不是很普遍,但由于我不知道你究竟想要达到的目的,这可能就足够了。

a = tf.placeholder(dtype = tf.float64, shape = (3, None))
b = tf.Variable(dtype = tf.float64, initial_value = np.random.randn(5, 3))
c = tf.matmul(b, a)
size = tf.shape(a)
t1 = size[0]
t2 = size[1]

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    res = sess.run([t1, t2], feed_dict = {a: np.random.randn(3, 4)})
    print(res)

替代:

a = tf.placeholder(dtype = tf.float64, shape = (3, None))
b = tf.Variable(dtype = tf.float64, initial_value = np.random.randn(5, 3))
c = tf.matmul(b, a)
size = tf.shape(a)

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    t1, t2 = sess.run(size, feed_dict = {a: np.random.randn(3, 4)})
print(t1, t2)