@ Дженнингс, вы уже добавляете массивы x
и y
к массивам x_ds
и y_ds
.Так что это не совсем решение вашей проблемы.Я не могу запустить твой код без твоей функции create_training_example
.Однако я использовал его для создания простого примера, который использует тот же метод для создания train_x.h5
(только) и заполнения массивов, созданных с помощью np.arange().reshape()
.Я создал 2000 массивов формы (1998, 101).Это может быть хорошим прокси для поведения, которое вы видите.Код работает «достаточно быстро» на моем ноутбуке (с 24 ГБ ОЗУ) и создает файл train_X.h5
, который составляет 3,9 ГБ.Исходя из вашего поста, это кажется подходящим (600 массивов ~ = 1,2 ГБ).Очевидно, вы получите гораздо больший файл, если создадите 50 000 массивов (может быть ~ 100 ГБ?)
Возможно, у вас проблема с аппаратными ресурсами.Я предлагаю вам запустить мой пример, чтобы посмотреть, как он себя ведет.После того, как вы получите эту точку данных, вы можете решить, что исследовать дальше.Некоторые идеи:
- Создание
train_X.h5
и train_Y.h5
отдельно. - Заполнение наборов данных Earray 500 массивами за раз (измените код, чтобы открыть обучающие файлы в режиме добавления)
Код ниже (изменено 1/2/2019): увеличен диапазон () и добавлен вывод статистики ОЗУ и синхронизации:
import numpy as np
import tables
import time
X_file = tables.open_file('train_X.h5', mode='w')
x_atom = tables.Float64Atom()
x_ds = X_file.create_earray(X_file.root, 'X_array', x_atom,(0,1998,101))
print(x_ds.shape)
start = time.clock()
for i in range(20000):
x = np.arange(1998*101).reshape(1998, 101)
x=np.expand_dims(x,0)
x_ds.append(x)
if ( ((i+1) % 100) == 0 ) :
print('iter=',i,'DS Mem Size = ', x_ds.size_in_memory, 'Elapsed time =', (time.clock() - start))
print ('Elapsed time =', (time.clock() - start) )
X_file.close()
print("Finished")