有一种情况我需要在模型的输出和常量之间进行元素比较。但是,模型的输出具有取决于占位符的大小,并且似乎很难引用相同大小的常量。
第一次尝试以某种方式产生标量值而不是元素操作:
tf.less(y,tf.constant(k,dtype=tf.float32))
这第二次尝试具有元素行为,但是是一个kludge:
tf.less(y,tf.constant(k,shape= [<INT_GREATER_THAN_BATCHSIZE>],dtype=tf.float32))
是否有一种干净的方式来引用图中占位符尚未确定的大小?
答案 0 :(得分:1)
引用(动态大小)张量形状的最简单方法是使用tf.shape(x)
op,它在运行时产生一个包含张量x
的真实形状的整数向量。
请注意tf.constant()
不接受动态形状作为参数 - 因为它不会是常数! - 但类似的tf.fill()
操作会这样做。
因此你可以写:
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))
......但不清楚为什么不适合你。