Numpy 如何检查两个张量形状是否相同,包括没有?

Numpy 如何检查两个张量形状是否相同,包括没有?,numpy,tensorflow,Numpy,Tensorflow,我想检查两个张量的形状是否相同 假设我有一些像这样的张量: a = tf.placeholder(tf.float32, shape=[None, 3]) b = tf.placeholder(tf.float32, shape=[None, 3]) 我添加了断言a.shape==b.shape。然而,这失败了,也许是因为没有。实际上a.shape=(?,1),而且b.shape是(?,1)。它们在我看来是一样的 如果没有“无”,则工作正常 a = tf.placeholder(tf.floa

我想检查两个张量的形状是否相同

假设我有一些像这样的张量:

a = tf.placeholder(tf.float32, shape=[None, 3])
b = tf.placeholder(tf.float32, shape=[None, 3])
我添加了
断言a.shape==b.shape
。然而,这失败了,也许是因为没有。实际上
a.shape
=
(?,1)
,而且
b.shape
(?,1)
。它们在我看来是一样的

如果没有“无”,则工作正常

a = tf.placeholder(tf.float32, shape=[1, 3])
b = tf.placeholder(tf.float32, shape=[1, 3])
assert a.shape == b.shape  # True
在形状检查中,我如何可以忽略无

总之:

1: a = tf.placeholder(tf.float32, shape=[1, 3])
2: b = tf.placeholder(tf.float32, shape=[1, 3])
3: assert a.shape == b.shape  # True
4: 
5: a = tf.placeholder(tf.float32, shape=[None, 3])
6: b = tf.placeholder(tf.float32, shape=[None, 3])
7: assert a.shape == b.shape  # False

我希望第7行中的断言为真。

您可以使用
a.shape.as\u list()==b.shape.as\u list()
来比较两个对象是否“相等”。但是,执行此操作时应小心,因为如果两个形状在同一位置包含
None
,则不能保证这些形状的张量在该维度中具有相同的大小


(能够在
tf.TensorShape
中表示“符号”维度(如
batch\u size
)将非常有用,这将使平等性测试更加有用。我们正在研究API的扩展,以便在未来的TensorFlow版本中实现这一点。)

谢谢!如果我们有类似于tf.TensorShape.assert_same()的东西,那就太好了。另一个选项是使用
tf.assert_equal(a.shape,b.shape)
,尽管它不适用于部分已知的形状。您也可以使用
a.shape.is_兼容(b.shape)
,cf