gpt4 book ai didi

python - Pytorch tensor.save() 为来自 MNIST 的小张量生成大文件

转载 作者:行者123 更新时间:2023-12-03 16:02:54 26 4
gpt4 key购买 nike

我正在使用来自 Kaggle challange 的 MNIST 数据集并且在数据预处理方面遇到麻烦。此外,我不知道什么是最佳实践,想知道您是否可以就此提出建议。

免责声明:我不能只使用 torchvision.datasets.mnist 因为我需要使用 Kaggle 的数据进行训练和提交。

this教程中,建议创建一个从文件加载 .pt 张量的 Dataset 对象,以充分利用 GPU。为了实现这一点,我需要加载 Kaggle 提供的 csv 数据并将其保存为 .pt 文件:

import pandas as pd
import torch
import numpy as np

# import data
digits_train = pd.read_csv('data/train.csv')

train_tensor = torch.tensor(digits_train.drop(label, axis=1).to_numpy(), dtype=torch.int)
labels_tensor = torch.tensor(digits_train[label].to_numpy())

for i in range(train_tensor.shape[0]):
torch.save(train_tensor[i], "data/train-" + str(i) + ".pt")


每个 train_tensor[i].shapetorch.Size([1, 784])
但是,每个此类 .pt 文件的大小约为 130MB。
相同大小的张量,随机生成整数,大小为 6.6kB。
为什么这些张量如此巨大,我该如何减小它们的大小?

数据集是 42 000 个样本。我什至应该打扰批处理这些数据吗?我是否应该费心将张量保存到单独的文件中,而不是将它们全部加载到 RAM 中然后分批?这里最好的方法是什么?

最佳答案

this discussion 中所述, torch.save()保存整个张量,而不仅仅是切片。您需要使用 clone() 显式复制数据.

别担心,除非您明确创建副本,否则在运行时数据只会分配一次。

作为一般建议:如果数据很容易放入您的内存中,只需立即加载它。对于 130 MB 的 MNIST,情况确实如此。

但是,我仍然会对数据进行批处理,因为它收敛得更快。查看 SGD 的优势以获取更多详细信息。

关于python - Pytorch tensor.save() 为来自 MNIST 的小张量生成大文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60421630/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com