首页 > 解决方案 > 在 PyTorch 中沿矩阵的对角线绑定所有值

问题描述

我正在实施的模型有​​一组参数 a1,...,aH,它们对应于对先前输出的加权。它是通过将如下所示的矩阵相乘来实现的:

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

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

但是,这需要每次前向传递都重新构建矩阵。有没有办法让矩阵本身成为参数,但将权重沿主对角线和下对角线联系起来,这样就相当于从参数向量构造它?

标签: pythonpytorch

解决方案


你可以dia_matrixscipy使用

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]

推荐阅读