参考 Tensorflow 中未确定的占位符大小?

Referring to Undetermined Placeholder Size In Tensorflow?

在某些情况下,我需要在我的模型输出和常量之间进行逐元素比较。但是,模型的输出大小取决于占位符,而且似乎很难引用相同大小的常量。

第一次尝试以某种方式生成标量值而不是进行元素运算:

tf.less(y,tf.constant(k,dtype=tf.float32))

这第二次尝试具有元素行为,但是是一个拼凑:

 tf.less(y,tf.constant(k,shape= [<INT_GREATER_THAN_BATCHSIZE>],dtype=tf.float32))

是否有一种简洁的方法来引用图中占位符的尚未确定的大小?

引用(动态大小的)张量形状的最简单方法是使用 tf.shape(x) 操作,它在运行时生成包含张量真实形状的整数向量 x.

请注意,tf.constant() 不接受动态形状作为参数——因为那样它就不是常量了!——但类似的 tf.fill() op 可以。

因此你可以这样写:

p = tf.placeholder(..., shape=[None])
# ...
result = tf.less(y, tf.fill(tf.shape(p), tf.constant(k, dtype=tf.float32)))

PS。请注意,如果 k 是标量,则 tf.less() op 应该 广播 k 的形状以匹配 y,并且以下应该有效:

tf.less(y, tf.constant(k, dtype=tf.float32))

...但不清楚为什么这对您不起作用。