在使用tensorflow的tf.tensordot时,我遇到了一些奇怪的结果。运行以下代码块
import tensorflow as tf
import numpy as np
a = np.arange(6, dtype=np.int32).reshape(3,2)
b = np.arange(1,7, dtype=np.int32).reshape(2,3)
sess = tf.Session()
print(sess.run(tf.tensordot(a, b, [[0,1],[0,1]])))
print(sess.run(tf.tensordot(a, b, [[0,1],[1,0]])))
print(sess.run(tf.tensordot(a, b, [[1,0],[0,1]])))
print(sess.run(tf.tensordot(a, b, [[1,0],[1,0]])))产生
70
65
65
60我不知道这里发生了什么收缩。另一件有趣的事情是,尝试用numpy的tensordot来做这件事将返回几个尝试轴的错误。
发布于 2018-07-20 15:25:37
你在tensorflow发现了一个窃听器。
根据tf.tensordot的文档,
a_axes[i]ofa必须具有与b轴b_axes[i]相同的维度,用于range(0, len(a_axes))中的所有i。
例如,tf.tensordot(a, b, [[0,1],[0,1]]))应该返回一个错误,因为a是3x2,b是2x3。但这不是.那是虫子。
相反,它继续进行,好像张量是相容的。如果a和b兼容,那么tf.tensordot(a, b, [[0,1],[0,1]]))将是一个简单的点产品。tf.tensordot内部所做的是,它基本上将a和b压平,并计算点积。
在您的例子中,a和b有相同数量的元素,因此,尽管它们的形状不兼容,但点积的计算仍然成功。
您可以向TF团队这里提交一个bug。
https://stackoverflow.com/questions/46522622
复制相似问题