Как эффективно сохранить и загрузить набор данных с помощью h5py? - PullRequest
0 голосов
/ 28 октября 2019

У меня есть набор данных размером (900, 200, 308, 311, 1), где в каждом образце есть 200 изображений, каждое из которых имеет размер 308x311. Я создал файл h5py (dtype: float) из этого набора данных, который составляет около 125GB (намного больше, чем фактические данные).

Сам процесс создания данных занял много времени. Вот как я это сделал:

input = []
# 900 samples
for sample in dataset:
    sequence = []
    # 200 images/sample
    for file in images:
        img = #read file
        sequence.append(img)
    input.append(sequence)
input = np.array(input).reshape(900, 200, 308, 311, 1)

with h5py.File('X.h5py', 'w') as f:
    d = f.create_dataset('X', data=input, dtype='float')

Когда я загружаю этот файл, загрузка данных в память снова занимает целую вечность

f = h5py.File("X.h5py","r")
X = np.array(f['X'])

Существует ли эффективный способ хранения изагрузка данных такая большая. Я видел chunking данные, но я не уверен, может ли это помочь. Кроме того, если я храню данные в чанках, могу ли я загрузить одну выборку из данных вместо чанков, как раньше?

1 Ответ

0 голосов
/ 30 октября 2019

Я сделал две вещи, которые привели к более быстрому сохранению и загрузке

  1. Вместо добавления изображения в качестве матрицы, я использовал плоский вектор.
  2. Я нормализовал данныетаким образом, что мне больше не нужно использовать float.

Эти две вещи привели к сохранению данных в измерениях (#samples, #time_steps, #pixels). Затем я изменил массив numpy после загрузки файла h5py.

Результат: Меньшее потребление памяти и более быстрое время доступа.

Спасибо @ kcw8 за упоминание обрезки,Это также помогло, когда я хочу создать подмножество данных без загрузки всего набора данных.

...