我有~15000三維張量(每個尺寸爲2x300x20),我需要保存到磁盤。我檢查了2個選項: 1.一個大的張量15000x2x300x20 2. 15000張張的表。火炬:張量與表:磁盤空間
我更喜歡將它保存在一個大張量(通過torch.save()),但不幸的是新文件在第一個選項中要大得多。這是爲什麼 ?有沒有一種將張量保存到磁盤的有效方法? (例如,對於160個張量(而不是15000),該文件相對於第二個選項中的10MG是1.3GB)。
我有~15000三維張量(每個尺寸爲2x300x20),我需要保存到磁盤。我檢查了2個選項: 1.一個大的張量15000x2x300x20 2. 15000張張的表。火炬:張量與表:磁盤空間
我更喜歡將它保存在一個大張量(通過torch.save()),但不幸的是新文件在第一個選項中要大得多。這是爲什麼 ?有沒有一種將張量保存到磁盤的有效方法? (例如,對於160個張量(而不是15000),該文件相對於第二個選項中的10MG是1.3GB)。
第二個選項(張量表)由於包含N(= 15,000)乘以每個2x300x20張量的標題(見下文)而具有開銷。但是這個開銷在這裏可以忽略不計。數據總量。所以這兩個選項在空間上應該是大約等價。
這就是說請注意底層存儲是歸檔的一部分。這意味着,如果由於某種原因,存儲比目前張量大小,存檔將大,如:
這裏x.t7
約爲782KB與119B爲y.t7
,因爲它是指一個100,000個元素的基礎存儲。
在你的第一個選項中,你應該仔細檢查你是不是在這種情況下。
-
例如,序列化ASCII模式的虛設火炬張量:
$ 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.
正如你可以看到存檔包括:表示type of the object第一整數(4這裏),和用於像它的版本火炬類的其他元數據(V 1
這裏)等等,然後是最終值(這裏是1234
)。