为了训练神经网络,在某些时候我有一个巨大的212,243×2500密集矩阵phi
,以及向量y
(212243)和w
(2500),它们存储为numpy
个双精度数组。我想要计算的是
w = dot(pinv(phi), y)
# serialize w...
r = dot(w, transpose(phi))
# serialize r...
我的机器在Ubuntu x64上有6 GB的RAM和16 GB的交换。我开始计算两次,两次在大约一个小时的工作后以系统(而不是python)交换错误结束。
我有没有办法在计算机上执行此计算?它不需要用python完成。
答案 0 :(得分:3)
如果除了计算w
之外的其他任何内容都不需要伪逆,请将该行替换为:
w = np.linalg.lstsq(phi, y)[0]
在我的系统上,它的运行速度提高了约2倍,并占用了大约一半的中间存储空间。
答案 1 :(得分:0)
让我们看看:
212,243 row values * 2500 col values * 8 bytes/value = 4,244,860,000 bytes = 4GB
你需要多少内存才能将整个矩阵保存在内存中。
如果这是Java,我建议你提高JVM上的最大堆。我不知道Python的类比是什么。