Я тренирую глубокий классификатор обучения, который использует набор данных HDF5, который слишком велик, чтобы вписаться в память. Поэтому я извлекаю данные партиями 256 и использую эти партии для обучения моего классификатора следующим образом. Библиотека глубокого обучения, которую я использую (Keras), предоставляет метод model.train_on_batch(X_batch, y_batch)
.Предварительная загрузка части файла HDF5 при выполнении другой задачи
for i in range(n_batches_in_dset):
X_batch, y_batch = load_partition('train', ind=[i*batch_size, (i+1)*batch_size])
loss = model.train_on_batch(X_batch, y_batch)
Было бы целесообразно предварительно отбирать следующую партию данных во время обучения текущим данным с использованием графического процессора. Как это можно сделать в Python?
Я приложил код, который я использую для загрузки данных.
def load_hdf5(path, datapart, ind=None):
f = h5py.File(path, 'r')
if ind is None:
dat = f[datapart][:]
else:
dat = f[datapart][ind[0]:ind[1]]
f.close()
return np.array(dat)
def load_partition(name, ind=None):
path = DEEP_ROOT + 'data/{}.h5'.format(name)
X = load_hdf5(path, 'data', ind)
y = load_hdf5(path, 'label', ind)
X = np.swapaxes(X, 2, 3)
y = np_utils.to_categorical(y)
return X, y
Вместо загрузки каждой партии (256 наблюдений), было бы на самом деле больше смысла для предварительной загрузки 20% набора данных (20000 наблюдений) и переместить все это на GPU. Таким образом, как IO с диска, так и на графический процессор значительно сокращаются. Вы знаете, как я могу явно перенести данные на графический процессор? – pir
Нет, я не знаю в первую очередь об инструментах, которые вы используете, кроме того, что вы описали в своем вопросе. Этот ответ, если с точки зрения «общего решения проблемы на питоне». – SingleNegationElimination