2016-04-07 71 views
0

我有~15000三维张量(每个尺寸为2x300x20),我需要保存到磁盘。我检查了2个选项: 1.一个大的张量15000x2x300x20 2. 15000张张的表。火炬:张量与表:磁盘空间

我更喜欢将它保存在一个大张量(通过torch.save()),但不幸的是新文件在第一个选项中要大得多。这是为什么 ?有没有一种将张量保存到磁盘的有效方法? (例如,对于160个张量(而不是15000),该文件相对于第二个选项中的10MG是1.3GB)。

回答

0

第二个选项(张量表)由于包含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)。