给定一些占位符张量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(...)
不起作用?
答案 0 :(得分:5)
您可以为运行局部张量设置动态形状(可以在计算需要时动态创建),如零,一,随机张量等。
但是对于变量,你不能因为它们需要被分配并且在每次运行之间都是守恒的,所以它们需要具有固定的形状(不依赖于运行操作)。
要获得相同的结果,您应该使用x.get_shape()[0]
,如果已定义,则会返回请求的维度。