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 自动传播到参数。
但是,这需要每次前向传递都重新构建矩阵。有没有办法让矩阵本身成为参数,但将权重沿主对角线和下对角线联系起来,这样就相当于从参数向量构造它?
解决方案
你可以dia_matrix
从scipy使用
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]
推荐阅读
- javascript - 允许特定 IP 地址访问我网站上的页面
- angularjs - TypeError: ($scope.values || []).map 不是函数
- mysql - Mysql Join查询与日期分组
- shell - 如何判断我的 C 程序是否是通过 shebang 调用的?
- javascript - After Effects 脚本手动工作,但在启动时不工作
- php - MySQL 选择根据表中的条目数创建排名...怎么做?
- matlab - 使用网格网格查找速度值时如何绘制二维平流问题?
- c# - 如何使用 REGEX 将提供为“FY18 Q1”的季度转换为 C# 中的“2018.4”?
- c++ - 为什么新的archive.txt在编辑或从档案中删除时会添加“-858993460”?
- scala - 为什么这组解析器组合器会溢出堆栈?