【问题标题】:Saving a big dataset on a h5 file [duplicate]将大数据集保存在 h5 文件中 [重复]
【发布时间】:2020-10-22 09:11:25
【问题描述】:

我正在尝试为我的机器学习应用程序创建内存。内存大小为NXz,其中z 是我的向量的大小,N 是它在内存中的实例数。 N 可以很大。随着模型训练的进行,我将阅读和更新各个行。通常在使用h5py 创建数据集时,我们会这样做,

import h5py
import numpy as np
matrix = np.zeros((mem_size,zt_size))
with h5py.File("my_file.h5",'w') as hf:            
     hf.create_dataset("my_dset",matrix)

但我担心如果我采用非常大的mem_sizematrix = np.zeros((mem_size,zt_size)) 行可能会失败,因为内存可能会被填满。或者,我想我会迭代地填满内存,

 vector = np.zeros((mem_size,zt_size))
 with h5py.File("my_file.h5",'w') as hf:
     for i in range(mem_size):
         hf.create_dataset(str(i),vector)

但是,现在我担心从内存中读取和更新会变慢,因为索引太多了。我怎样才能在不填满我的 ram 或不造成较大的相对滞后的情况下做到这一点?还将欣赏使用不同库的替代实现。

注意,我将在训练期间使用磁盘内存,所以这可能是我训练的瓶颈。

【问题讨论】:

    标签: python numpy h5py


    【解决方案1】:

    我认为您使用术语“内存”来存储系统 RAM 中的程序数据并保存在磁盘上。它们是不同的。

    您是对的,您的程序仅限于系统 RAM 可以“在内存中”保存的数据量。但是,程序可以访问比系统 RAM 大得多的磁盘(在文件中)中的数据。

    例如,如果您有 24GB 的 RAM,您的程序可能会在内存中创建一个 20GB 的数组(取决于您的系统当时正在做什么)。然后,您可以将该阵列写入磁盘(创建一个 20GB 的文件)。然后,您可以创建另外 20GB 的内存数据并将其附加到您的文件(增长到 40GB)。重复多次,文件每次都变大。但是,您的程序的内存占用不会增加(它不会)。

    在处理大型数据集时,设计您的程序以访问和处理数据的子集。您可以使用 HDF5 将数据存储在磁盘上,使用 numpy/h5py 将数据切片读入内存。这本身就是一个完整的话题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-31
      • 1970-01-01
      • 2022-06-28
      • 1970-01-01
      • 2019-08-12
      • 2012-05-19
      • 2017-06-28
      • 1970-01-01
      相关资源
      最近更新 更多