Derzeit implementiere ich diese paper für meine Bachelor-Thesen mit Python, aber ich benutze nur die Mahalanobis Metrik lernen (falls Sie neugierig sind).Speicherauspuff auf große Matrixoperation mit dask
In einer Verknüpfung, ich habe ein Problem, wenn ich eine Matrix mit der Größe von 67K * 67K, bestehend aus Ganzzahl, durch einfach numpy.dot(A.T,A)
wo A ist ein zufälliger Vektor Größe (1,67K) lernen muss. Wenn ich das mache, wirf einfach MemoryError, da mein PC nur 8GB RAM hat, und die rohe Berechnung des benötigten Speichers ist 16GB zu init. Dann suche ich nach Alternativen und finde dask.
so ging ich weiter zu dask mit diesem dask.array.dot(A.T,A)
und es ist fertig. Aber als ich weiß, Transformation zu dieser Matrix zu machen, und in dies kann ich erreichen, indem Sie die SVD. Aber jedes Mal, wenn ich diese SVD mache, stirbt der ipython-Kernel (ich nehme es aufgrund von fehlendem Speicher an).
das ist, was ich von init so weit zu tun, bis der Kernel stirbt:
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
ich die U, S nicht bekommen, und noch Vt.
Ist meine Erinnerung einfach nicht genug, um diese Art von Dingen zu tun, auch wenn ich dask benutze? oder eigentlich ist dies kein spezifisches Problem, aber meine schlechte Speicherverwaltung? oder etwas anderes?
An diesem Punkt versuche ich verzweifelt in anderen größeren spec PC, also plane ich einen Bare-Metal-Server mit einem 32 GB RAM zu mieten. Selbst wenn ich das tue, ist es genug?
Benötigen Sie die vollständige SVD oder sind Sie nur an den * N * größten singulären Werten/Vektoren interessiert? –
Ich brauche die SVD, weil ich außerdem weiß, Transformation und PCA mit diesem Ergebnis tun möchten. Btw @mrocklin hat mich davon überzeugt, dass es sich lohnt, Sachen auf einer größeren Spec zu machen. Danke trotzdem – yusufazishty
Sie können eine Rang * N * weiß gemachte Matrix aus den * N * -größten singulären Werten und Vektoren erzeugen. Abhängig von der Größe von * N * kann dies um viele Größenordnungen effizienter sein als die Berechnung der vollständigen SVD. –