2016-03-28 7 views
1

Ich bin neu in großen Datasets und Probleme bei der Extrapolation der Erklärungen und Tutorials, die ich zu meinem Problem lese.Komprimieren von großen 4D numpy Arrays zu HDF5 mit h5py Getötet: 9

Ich möchte 37019 Bilder (je 450x600x3) in einem numply-Array speichern und dieses in eine Datei für das Training komprimieren. Ist es besser, ein 37019x450x600x3-Array von Nullen zu instanziieren und später zu modifizieren oder 450x600x3-Arrays einzeln anzufügen?

Im Moment bin ich mit h5py aber es ergibt sich ein getötet: 9

import numpy as np 
import h5py 

imgarray = np.zeros((37019,450, 600, 3)) 

with h5py.File('deleteme.h5', 'a') as FOB: 
    FOB.create_dataset("imgarray",data=imgarray,compression="gzip",compression_opts=9) 

dauert ca. 5 Minuten, dann:

Killed: 9 

Dies funktioniert, wenn die Anzahl der Bilder, die kleiner solcher ist wie 3700 statt 37019. 3700 ergibt eine .h5-Datei, die 30 MB ist.

Bedeutet dies, dass mein Array für einen Datensatz in h5dy zu groß ist? Muss ich das in kleineren Blöcken, separaten Datensätzen oder etwas anderem speichern? Welche Methode empfehlen Sie für einen einfachen Zugriff und eine spätere Modifikation?

danke für die Hilfe!

Antwort

0

In Ihrer anderen Frage haben Sie festgestellt, dass es Größenbeschränkungen für zip Archive geben kann; Es kann auch auf gzip Kompression angewendet werden. Oder es dauert vielleicht zu lange.

Die h5py Dokumentation zeigt an, dass ein dataset im laufenden Betrieb komprimiert wird, wenn in einer h5py-Datei gespeichert (und im laufenden Betrieb dekomprimiert). Ich sehe auch eine Erwähnung, dass es mit chunking interagiert. Möglicherweise müssen Sie das h5py Github-Repository oder die entsprechende Mailingliste durchsuchen.

Haben Sie andere Komprimierungsmethoden oder Parameter ausprobiert?

Wie wäre es mit dem Speichern Ihrer Daten in mehreren Datensätzen, jeder von einer Größe, die leicht komprimiert?

0

Es gibt wahrscheinlich einen besseren Weg, dies zu tun, aber ich endete nur meine Datenmenge in mehrere numply Arrays der Größe 1000x450x600x3 und Gzip funktioniert gut für diese. Es dauerte 25 Minuten, aber alles wurde in einer .h5-Datei mit 400 MB gespeichert. Vielen Dank!