检测TensorFlow中的最后一个维度是1还是5?
我正在编写TensorFlow(python)逻辑来确定张量的最后一个维度是1还是5。如果张量是标量,则此表达式应为false。在图构造时,张量的形状是未知的 给定张量检测TensorFlow中的最后一个维度是1还是5?,tensorflow,Tensorflow,我正在编写TensorFlow(python)逻辑来确定张量的最后一个维度是1还是5。如果张量是标量,则此表达式应为false。在图构造时,张量的形状是未知的 给定张量输入,我已经试过了 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(i
输入
,我已经试过了
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)
)
)
但是,当输入
张量是标量时,此逻辑会引发错误,因为表达式的tf.better(tf.rank(input),0)
部分无法导致TensorFlow短路(并避免执行图的tf.logical\u或
部分)。这是预期的行为
有没有办法找到张量的最后一个维度,但让逻辑优雅地处理输入张量是标量的情况
例如,也许有一种方法可以强制执行一个控件依赖项,从而使秩检查首先运行
我想我可以在这里使用,但我有点担心调用lambda函数会如何改变图形。您可以简单地扩展输入张量的dims,使其在所有情况下都能工作(即,将标量情况转换为张量): 输出:
Input: 1
Output: False
Input: [ 0. 0.]
Output: False
Input: [[ 0. 0. 0. 0. 0.]]
Output: True
Input: [[[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]]]
Output: False
您可以简单地扩展输入张量的dims,使其在所有情况下都能工作(即,将标量情况转换为张量): 输出:
Input: 1
Output: False
Input: [ 0. 0.]
Output: False
Input: [[ 0. 0. 0. 0. 0.]]
Output: True
Input: [[[ 0. 0. 0. 0. 0. 0.]
[ 0. 0. 0. 0. 0. 0.]]]
Output: False
在TF2中,您只需使用
.shape
并检查最后一个([-1]
)维度是否为您要查找的维度。您不必运行会话,因为在版本2中,默认情况下启用了即时执行
[1,5]中的一些张量形状[-1]
colab demo:在TF2中,您只需使用
.shape
并检查最后一个([-1]
)维度是否是您要查找的维度。您不必运行会话,因为在版本2中,默认情况下启用了即时执行
[1,5]中的一些张量形状[-1]
colab演示: