我有一个拥有几百万行的自制数据集。我正在尝试制作截断的副本。所以我剪切了我用来制作原始数据集并创建新数据集的张量。但是,当我保存新数据集(仅为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)
由于
答案 0 :(得分:1)
在代码d
和training_data
中共享相同的内存,即使您在创建d
期间使用切片也是如此。我不知道为什么会这样,但无论如何都要回答给你一个解决方案:
d = x[0:10000].clone()
l = y[0:10000].clone()
clone
会为Tensors提供一个独立于旧Tensor的内存,文件大小会小得多。
请注意,创建torch.Tensor()
和d
时无需使用l
,因为training_data
和labels
已经是张量。