我正在实现的模型具有一组参数a1,...,aH,它们对应于对先前的输出进行加权。它通过一个矩阵乘以意识到,看起来像这样:
a1 0 0 0 0 ...
a2 a1 0 0 0 ...
a3 a2 a1 0 0 ...
: : : : :
在当前实现中,a被保存在具有H个条目的一维nn.parameter.Parameter
中,在每次正向传递过程中均从中构造矩阵。矩阵的梯度通过autograd自动传播到参数。
然而,这要求构建矩阵重新每直传。有没有一种方法可以让矩阵本身作为参数,但将权重沿主对角线和下部对角线绑定,以使其等效于根据参数矢量构造它?
答案 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]