Я тренирую модель с использованием Keras 2.2.4 и python 3.5.3 и Tensorflow на виртуальной машине GCP с графическим процессором K80.
Загрузка графического процессора колеблется между 25 и 50%, в то время как процессорный процесс с Python съедает 98%
I Предположим, Python слишком медленный, чтобы заполнить данные K80.
Код как ниже.
Существует несколько дней данных для каждой эпохи.
Каждый день имеет около 20 тысяч образцов - число немного отличается для каждого.
Размер партии фиксируется переменной window_size=900
Так что я кормлю его около 19 тысяч раз в день. Партия 0 начинается с образца 0 и отбирает 900 образцов, партия 1 начинается с образца 1 и отбирает 900 образцов и т. Д. До конца дня.
Итак, у меня есть 3 цикла - эпоха, дни, партии.
Я чувствую, что эпоха и дни должны быть сохранены для ясности. Я не думаю, что они являются проблемой
Я думаю, следует рассмотреть самую внутреннюю петлю.
Реализация внутреннего цикла наивна. Есть ли хитрость, которая может ускорить работу с массивами?
# d is tuple from groupby - d[0] = date, d[1] = values
for epoch in epochs:
print('epoch: ', epoch)
for d in days :
print(' day: ', d[0])
# get arrays for the day
features = np.asarray(d[1])[:,2:9].astype(dtype = 'float32')
print(len(features), len(features[0]), features[1].dtype)
labels = np.asarray(d[1])[:, 9:].astype(dtype = 'int8')
print(len(labels), len(labels[0]), labels[1].dtype)
for batch in range(len(features) - window_size):
# # # can these be optimised?
fb = features[batch:batch+window_size,:]
lb = labels[batch:batch+window_size,:]
fb = fb.reshape(1, fb.shape[0], fb.shape[1])
lb = lb.reshape(1, lb.shape[0], lb.shape[1])
# # #
model.train_on_batch(fb, lb)
#for batches
#model.reset_states()
#for days
#for epoch