为什么tf.zeros允许未知维度而tf.get_variable不允许?

时间:2017-05-19 07:52:35

标签: tensorflow

给定一些占位符张量x,以便:

x = tf.placeholder(None, 100)

我想知道原因:

h = tf.zeros(shape = (tf.shape(x)[0], 50))

有效,但有:

h = tf.get_variable("h", shape = (tf.shape(x)[0], 50), initializer = tf.constant_initializer(0.0))

给我一​​个价值错误:

  

ValueError:必须完全定义新变量(pred / h)的形状,   但反而是(?,50)

它们是否都初始化了一些变量,为什么要使tf.zeros(...)使用未知大小,而tf.get_variable(...)不起作用?

1 个答案:

答案 0 :(得分:5)

您可以为运行局部张量设置动态形状(可以在计算需要时动态创建),如零,一,随机张量等。

但是对于变量,你不能因为它们需要被分配并且在每次运行之间都是守恒的,所以它们需要具有固定的形状(不依赖于运行操作)。

要获得相同的结果,您应该使用x.get_shape()[0],如果已定义,则会返回请求的维度。