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

Yel*_*low 2 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(...)不是?

Arn*_*sia 5

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

但是对于变量,你不能因为它们需要在每次运行之间进行分配和保存,所以它们需要具有固定的形状(不依赖于运行操作).

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