Python 为什么Tensorflow不覆盖张量的等式?
Tensorflow覆盖了Tensor类等的多个运算符 但是,Python 为什么Tensorflow不覆盖张量的等式?,python,numpy,tensorflow,Python,Numpy,Tensorflow,Tensorflow覆盖了Tensor类等的多个运算符 但是,\uuu eq\uu的实现: ops.Tensor.\u override\u运算符(“\u lt\u”,gen\u math\u ops.less) 运算张量,运算量,运算量,运算量,运算量,运算量,运算量 运算张量覆盖运算器(“uu gt_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu 运算张量,运算量,运算量,运算量,运算量,运算量,运算
\uuu eq\uu
的实现:
ops.Tensor.\u override\u运算符(“\u lt\u”,gen\u math\u ops.less)
运算张量,运算量,运算量,运算量,运算量,运算量,运算量
运算张量覆盖运算器(“uu gt_uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
运算张量,运算量,运算量,运算量,运算量,运算量,运算量,运算量,运算量,运算量,运算量
为什么tensorflow的张量的==
与numpy数组的行为方式不同
代码示例:
a = tf.constant([1,2])
b = tf.constant([3,4])
a == b
>>> False
a < b
>>> <tf.Tensor 'Less:0' shape=(2,) dtype=bool>
张量确实实现了\uuuuueq\uuuuu
,但是。我发现,这解释了为什么张量测试身份,而不广播:
这可能是一个复杂的事实,即张量可以用作字典中的键,我相信它使用=
来查找具有相同哈希的匹配对象
评论者是正确的;如果\uuuu eq\uuuu
被重载为广播,则不能将张量用作字典中的键。定义\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;见:
唯一需要的属性是比较相等的对象具有相同的哈希值
但广播将为具有不同散列值的对象生成“真”张量对象
(关于\uuuu eq\uuuu
会破坏布尔测试的推测是错误的;布尔测试使用的是张量,张量确实实现了这一点)
如果您需要对张量进行元素相等性测试,可以使用and函数。您是否认为\uuuuu eq\uuuu
不是仅在这些行上定义的?因为我看到,例如,将tensorflow导入为tf
,然后vars(tf.Tensor)
中的\uuueq\uuuuuuuuuuuuuuuuu>生成True
,因此它定义了钩子。它是定义的。@MartijnPieters不,我的观察是基于我的代码,没有做我期望它做的事情。这些链接是经过一些挖掘后产生的。另外,我知道张量相等的定义。但是,它不符合numpy
阵列。我希望添加的代码澄清了这个问题。为什么在测试相等性时要广播张量?该项目明确决定改为测试身份;我发现了一个github问题,这就解释了为什么。@musicaly\u ut:嗯,\u eq\u
被明确定义为身份测试。哇!在提要中使用张量作为键的设计决策导致\uuuu eq\uuuuu
的定义方式与tf.张量的numpy
的定义方式不同!看起来不是这么直截了当的。例如,tf.constant([0])==tf.constant([0])是至少在tf2中包含[True]的tf.Tensor。看起来执行力很强
a = np.asarray([1,2])
b = np.asarray([3, 4])
a == b
>>> array([False, False], dtype=bool)