假设我们有两个具有相同维数的张量 (A
和)。B
我们可以将它们与 相乘tensordot
。例如:
T.tensordot(A, B, axes = [[0,3], [0,3]])
在这种情况下,我们将第一个张量的轴与第二个张量的一些轴“配对”,然后对这些“配对”轴求和:
C[j, k, a, b ] = sum_{i, l} A[i, j, k, l] * A[i, a, b, l]
在上面的例子中,第一个张量的第一个和最后一个轴分别与第二个张量的第一个和最后一个轴配对。
或者,我们可以将两个张量逐元素相乘:
C[i, j, k, l] = A[i, j, k, l] * B[i, j, k, l]
在这种情况下,我们将第一个张量的所有轴与第二个张量的所有对应轴“配对”(第一个与第一个,第二个与第二个等等)。
现在,我想做一些介于上述两个操作之间的事情。详细信息:
- 我想将第一个张量的某个轴与第二个张量的某个轴配对(就像 w 在 中做的那样
tensordot
)。所以,我不想将 A 的所有轴与 B 的所有轴配对。 - 我不想对所有成对的轴求和(就像我们在成对乘法中所做的那样,对成对的轴没有求和)。
这是我想以“数学”形式写的内容:
C[a, b, c, i] = sum_d A[a, b, c, d] * B[i, b, c, d]
在theano中最好的方法是什么?