我正在研究 GANs 模型,生成器創建一個大小(3,128,128)為我用偽代碼轉儲的張量
import torch
image = Generator(noise).clone()
tensor = image[0].detach().cpu()
torch.save(tensor, save_path)
問題是張量比相同的張量大小花費更多的存盤空間,即使它們具有相同的shape和dtype
>>> import sys
>>> import torch
>>> tensor = tensor.load(save_path)
>>> rand_t = torch.randn(tensor.shape)
>>> print(tensor.shape, rand_t.shape)
torch.Size([3, 128, 128]) torch.Size([3, 128, 128])
>>> print(tensor.dtype, rand_t.dtype)
torch.float32 torch.float32
>>> print(sys.getsizeof(tensor.storage()))
9830472
>>> print(sys.getsizeof(rand_t.storage()))
196680
我試圖轉儲那些張量,生成器的輸出取了9.2MB,隨機張量取了197.4kB。我確實閱讀了 pytorch 的檔案,但一無所獲。請幫我弄清楚它們之間有什么區別?
uj5u.com熱心網友回復:
似乎直接從原始中提取子張量會帶來整個容器。該函式.clone()可以解決它。例子:
>>> import sys
>>> import torch
>>> tensor = torch.randn(10,3,128,128)
>>> sys.getsizeof(tensor.storage())
1966144
>>> sub1 = tensor[0]
>>> sub1.shape
torch.Size([3, 128, 128])
>>> sys.getsizeof(sub1.storage())
1966144
>>> sub2 = tensor[0].clone()
>>> sub2.shape
torch.Size([3, 128, 128])
>>> sys.getsizeof(sub2.storage())
196672
因此,就我而言,單獨克隆影像應該可以解決問題:
import torch
image = Generator(noise).clone()
tensor = image[0].detach().clone().cpu() # using clone()
torch.save(tensor, save_path)
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/411797.html
標籤:
上一篇:有沒有辦法將我的GPU的整個記憶體用于CUML計算?
下一篇:在Azure中托管舊版WCF服務
