目前我正在实施这篇论文,但我只使用马氏度量学习(如果你好奇的话)。
简而言之,当我需要学习一个由整数组成的大小为 67K*67K 的矩阵时,我遇到了一个问题,numpy.dot(A.T,A)
其中 A 是一个大小为 (1,67K) 的随机向量。当我这样做时,它只是抛出 MemoryError,因为我的 PC 只有 8gb 内存,并且所需内存的原始计算是 16gb 来初始化。比我寻找替代品并发现dask。
所以我继续处理这个问题dask.array.dot(A.T,A)
并完成了。但是,我需要对该矩阵进行白化转换,并且在 dask 中,我可以通过获取SVD来实现它。但是每次我执行 SVD 时,ipython 内核都会死掉(我认为是因为内存不足)。
这就是我从 init 到内核死亡为止所做的事情:
fv_length=512*2*66
W = da.random.randint(10,20,(fv_length),(1000,1000))
W = da.reshape(W,(1,fv_length))
W_T = W.T
Wt = da.dot(W_T,W); del W,W_T
Wt = da.reshape(Wt,(fv_length*fv_length/2,2))
U,S,Vt = da.linalg.svd(Wt); del Wt
我还没有得到 U、S 和 Vt。
即使我使用 dask,我的记忆力是否还不足以做这些事情?或者实际上这不是规范问题,而是我糟糕的内存管理?或者是其他东西?
在这一点上,我正在拼命尝试其他更大规格的 PC,所以我打算租用 32gb 内存的裸机服务器。就算我这样做,也够了吗?