python - 训练深度学习模型时如何处理大型csv文件?

标签 python tensorflow keras deep-learning

我有一个用于训练深度学习模型的庞大数据集。它采用 .csv 格式。它大约有 2GB,现在,我只是用 Pandas 将整个数据加载到内存中。

df = pd.read_csv('test.csv')

然后将所有内容提供到 keras 模型中,然后像下面这样训练模型,
model.fit(df, targets)

我想知道在处理大型数据集时还有哪些其他选择。像大约 10 GB(或)的东西。我没有 ram 将所有内容加载到内存中并将其传递给模型。

我能想到的一种方法是以某种方式从 .csv 文件中获取随机样本/数据子集并通过数据生成器使用它,但问题是我找不到任何方法来读取 csv 文件的子集/样本将所有内容加载到内存中。

如何在不将所有内容加载到内存中的情况下训练模型?如果您有任何解决方案并且它使用一些内存,那没关系。只要让我知道。

最佳答案

我以前没有使用过这个功能,但可能是这样的:

class CsvSequence(Sequence):
    def __init__(self, batchnames):
       self.batchnames = batchnames

    def __len__(self):
       return len(self.batchnames)

    def __getitem__(self, i):
       name = self.batchnames[i]
       X = pd.read_csv(name + '-X.csv')
       Y = pd.read_csv(name + '-Y.csv')
       return X, Y

会工作。您需要通过将 10GB 文件拆分为例如 10 个较小的文件来预处理您的数据。 Unix split 如果您的 CSV 文件每行有一条记录(大多数情况下),实用程序可能就足够了

作为如何使用它的不完整示例:
seq = CsvSequence([
  'data-1', 'data-2', 'data-3'])

model.fit_generator(seq)

但请注意,您很快就会想做一些更有效的事情,上面的内容会导致您的 CSV 文件被多次读取。如果这个加载比其他所有东西加在一起花费的时间更多,我不会感到惊讶

一个建议是在训练前预处理文件,saving them to numpy binary files .然后二进制文件可以 mmap ed in while load ing这效率更高。

关于python - 训练深度学习模型时如何处理大型csv文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59909965/

相关文章:

tensorflow - 基于直方图定义 TF 中的损失函数

python - 如何在 TensorFlow 2.0 中使用 tf.Lambda 和 tf.Variable

tensorflow - 序列到序列 - 用于时间序列预测

python - 在 opensuse 上安装 pyodbc 时出错

python - 使用 PySerial 从串口读取二进制数据

python - 使用 TensorRT 部署语义分割网络(U-Net)(不支持上采样)

GPU 上的 Tensorflow 比 CPU 上的慢

python - U网: how to improve accuracy of multiclass segmentation?

python - 如何在由 uswgi 提供服务并由 systemd 服务启动的虚拟环境中配置 Django 应用程序?

python - 30 秒超时后,从 Heroku 流式传输大文件失败