【发布时间】:2019-11-18 13:13:30
【问题描述】:
我正在尝试理解在 TensorLy 中实现的张量的 Kronecker 积代码。下面是代码:
def kron(self, a, b):
"""Kronecker product of two tensors.
Parameters
----------
a, b : tensor
The tensors to compute the kronecker product of.
Returns
-------
tensor
"""
s1, s2 = self.shape(a)
s3, s4 = self.shape(b)
a = self.reshape(a, (s1, 1, s2, 1))
b = self.reshape(b, (1, s3, 1, s4))
return self.reshape(a * b, (s1 * s3, s2 * s4))
我知道self.shape(a) 将给出张量a 的形状(行、列、切片)。所以我们在s1和s2中采用a的形状,在s3和s4中采用b的形状。
a = self.reshape(a, (s1, 1, s2, 1)) 重塑张量“a”,但我发现很难理解 (s1, 1, s2, 1) 是什么,我们为什么要这样做? (1, s3, 1, s4) 也是如此。另外,我们为什么要这样做self.reshape(a * b, (s1 * s3, s2 * s4))?。
这似乎是一个非常开放的问题,但我才刚刚开始,希望得到帮助!
【问题讨论】:
-
FWIW,我不认为你的问题特别开放。我认为你做得很好,准确地解释了你理解的内容以及你需要帮助的地方。
-
话虽如此,小问题:两个张量显然都是二维的。不涉及切片