Pytorch tensor.save() produces huge files for small tensors

参考链接:https://stackoverflow.com/questions/60421630/pytorch-tensor-save-produces-huge-files-for-small-tensors-from-mnist

pytorch存储一个tensor的时候,假如这个tensor是某一个大tensor的一部分,如果你直接存,那么他会存成那个大的tensor,虽然你只需要大tensor的一部分,这个时候我们需要使用clone的这个函数,新建一个tensor,这样就不会存成那个大的了,并且如果存储的数据较少,那么其实大部分的空间不是被你的数据占据了,而是会被torch.save塞进去的其他东西占据了,存的多的话就还好,它塞进去的东西占的比例就小了。

下面是测试样例:

import torch
import os

if __name__ == '__main__':
    a= torch.tensor(64)
    torch.save(a, "./a_tensor.pt")
    torch.save(a.clone(), "./a_clone_tensor.pt")
    a_size = os.path.getsize("./a_tensor.pt")
    a_clone_size = os.path.getsize("./a_clone_tensor.pt")
    print(a_size)
    print(a_clone_size)

    b = [i for i in range(100)]
    b = [b for i in range(3)]
    b = torch.tensor(b)
    print(b.shape)
    torch.save(b, "b_tensor.pt")
    torch.save(b[0], "b0_tensor.pt")
    torch.save(b[0].clone(), "b0_clone_tensor.pt")
    b_size = os.path.getsize("b_tensor.pt")
    b0_size = os.path.getsize("b0_tensor.pt")
    b0_clone_size = os.path.getsize("b0_clone_tensor.pt")

    print(b_size)
    print(b0_size)
    print(b0_clone_size)

结果(单位是字节B):

759
759
torch.Size([3, 100])
3127
3127
1527
文章目录