在Tensorflow中更改新分配变量的形状

时间:2018-12-04 10:48:39

标签: python tensorflow

如果您将tf.assignvalidate_shape=False the shape is not updated一起使用来更改tf.Variable。

但是如果我使用set_shape设置新的(正确的)形状,则会出现ValueError。

下面是一个简单的示例:

import tensorflow as tf 

a = tf.Variable([3,3,3])

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    # [3 3 3]
    print(sess.run(a))

    sess.run(tf.assign(a, [4,4,4,4], validate_shape=False))
    # [4 4 4 4]
    print(sess.run(a))

# (3,)
print(a.get_shape())

# ValueError: Dimension 0 in both shapes must be equal, but are 3 and 4. Shapes are [3] and [4].
a.set_shape([4])

如何更改变量的形状?

注意:我知道如果使用a = tf.Variable([3,3,3], validate_shape=False),代码可以工作,但是在我的上下文中,我将无法自行初始化变量。

1 个答案:

答案 0 :(得分:0)

告诉图形的静态部分,形状从一开始也是未知的。

a = tf.Variable([3,3,3], validate_shape=False)

现在,要获得形状,您不能静态地知道,所以您必须询问会话,这很有意义:

print(sess.run(tf.shape(a)))