2016-04-07 6 views
0

Ich habe ~ 15000 3-D Tensoren (jeweils mit Größe 2x300x20), die ich auf der Festplatte speichern muss. Ich habe 2 Optionen überprüft: 1. Ein großer Tensor der Größe 15000x2x300x20 2. Tabelle der 15000 Tensoren.Torch: Tensor vs Tabelle: Speicherplatz

Ich bevorzuge es in einem großen Tensor zu speichern (via fackel.save()) aber leider ist die neue Datei viel viel größer in der ersten Option. Warum das ? Gibt es eine effiziente Möglichkeit, Tensor auf Festplatte zu speichern? (z. B. für 160 Tensoren (statt 15000) ist die Datei 1,3 GB relativ zu 10 MG in der zweiten Option).

Antwort

0

Die zweite Option (Tabelle der Tensoren) hat einen Overhead, da sie N (= 15.000) mal den Header jedes 2x300x20 Tensors enthält (siehe unten). Aber dieser Overhead ist hier vernachlässigbar. die Gesamtmenge der Daten. Also sollten beide Optionen grob äquivalent in Bezug auf den Raum sein.

Bitte beachten Sie, dass der zugrunde liegende Speicher Teil des Archivs ist. Das bedeutet, dass, wenn aus irgendeinem Grund, die Lagerung ist größer als die aktuelle Tensor Größe, wird das Archiv große, zB:

Hier x.t7 ist um 782KB vs. 119B für y.t7, denn es bezieht sich auf ein zugrunde liegender Speicher von 100.000 Elementen.

In Ihrer ersten Option sollten Sie überprüfen, dass Sie nicht in diesem Fall sind.

-

z.B. eine Dummy-Fackel Tensor im ASCII-Modus Serialisierung:

$ th -e "torch.save('foo.t7', torch.Tensor{1234}, 'ascii')" 
$ xxd -g1 foo.t7 
00000000: 34 0a 31 0a 33 0a 56 20 31 0a 31 38 0a 74 6f 72 4.1.3.V 1.18.tor 
00000010: 63 68 2e 44 6f 75 62 6c 65 54 65 6e 73 6f 72 0a ch.DoubleTensor. 
00000020: 31 0a 31 0a 31 0a 31 0a 34 0a 32 0a 33 0a 56 20 1.1.1.1.4.2.3.V 
00000030: 31 0a 31 39 0a 74 6f 72 63 68 2e 44 6f 75 62 6c 1.19.torch.Doubl 
00000040: 65 53 74 6f 72 61 67 65 0a 31 0a 31 32 33 34 0a eStorage.1.1234. 

Wie Sie das Archiv sehen kann, umfasst: eine erste ganze Zahl (4 hier), die die type of the object und für eine Fackel Klasse andere Metadaten wie seine Version (V 1 hier) bezeichnet usw. und dann der endgültige Wert (1234 hier).