【发布时间】:2017-11-24 15:57:17
【问题描述】:
我正在编写 TensorFlow (python) 逻辑来确定张量的最后一个维度是 1 还是 5。如果张量是标量,则此表达式应该为 false。在图构建时,张量的形状是未知的。
给定张量input,我已经尝试过
tf.logical_and(
# The tensor must not be a scalar.
tf.greater(tf.rank(input), 0),
# Check the last dimension.
tf.logical_or(
tf.equal(tf.shape(input)[-1], 1),
tf.equal(tf.shape(input)[-1], 5)
)
)
但是,当 input 张量是标量时,此逻辑会引发错误,因为表达式的 tf.greater(tf.rank(input), 0) 部分无法导致 TensorFlow 短路(并避免执行图表的 tf.logical_or 部分)。这是预期的行为。
有什么方法可以找到张量的最后一个维度,但让逻辑优雅地处理输入张量是标量的情况?
例如,也许有一种方法可以强制执行导致排名检查首先运行的控制依赖关系?
我想我可以在这里使用tf.cond,但我对调用 lambda 函数如何改变图形有点不安。
【问题讨论】:
标签: tensorflow