我有一个包含几百万行的自制数据集。我正在尝试制作截断的副本。所以我剪辑了我用来制作原始数据集的张量并创建了一个新数据集。但是,当我保存只有 20K 行的新数据集时,它在磁盘上的大小与原始数据集相同。否则一切看起来都很干净,包括,当我检查时,新张量的大小。我做错了什么?
#original dataset - 2+million rows
dataset = D.TensorDataset(training_data, labels)
torch.save(dataset, filename)
#20k dataset for experiments
d = torch.Tensor(training_data[0:20000])
l = torch.Tensor(labels[0:20000])
ds_small = D.TensorDataset(d,l)
#this is the same size as the one above on disk... approx 1.45GB
torch.save(ds_small, filename_small)
谢谢
最佳答案
在您的代码中,d
和 training_data
共享相同的内存,即使您在创建 d
期间使用切片也是如此。我不知道为什么会这样,但无论如何回答给你一个解决方案:
d = x[0:10000].clone()
l = y[0:10000].clone()
clone
将为您提供内存独立于旧 Tensor 的 Tensors,并且文件大小会小得多。
请注意,由于 training_data
和labels
已经是张量了。
关于pytorch - 调整大小的 Pytorch 张量/数据集副本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46227756/