将所有值沿PyTorch中的矩阵对角线绑起来

时间:2019-02-01 12:23:56

标签: python pytorch

我正在实现的模型具有一组参数a1,...,aH,它们对应于对先前的输出进行加权。它通过一个矩阵乘以意识到,看起来像这样:

a1  0  0  0  0 ...
a2 a1  0  0  0 ...
a3 a2 a1  0  0 ...
 :  :  :  :  :

在当前实现中,a被保存在具有H个条目的一维nn.parameter.Parameter中,在每次正向传递过程中均从中构造矩阵。矩阵的梯度通过autograd自动传播到参数。

然而,这要求构建矩阵重新每直传。有没有一种方法可以让矩阵本身作为参数,但将权重沿主对角线和下部对角线绑定,以使其等效于根据参数矢量构造它?

1 个答案:

答案 0 :(得分:0)

您可以使用scipy中的dia_matrix

from scipy.sparse import dia_matrix

a = [1,2,3]
b = [4,5]

m = dia_matrix([a, b], [0, -1])
print(m)
#   (0, 0)  [1, 2, 3]
#   (0, 1)  [4, 5]
a[0] = 10

print(m)
#   (0, 0)  [10, 2, 3]
#   (0, 1)  [4, 5]