Ускорить обучение Keras LSTM - PullRequest
       5

Ускорить обучение Keras LSTM

0 голосов
/ 18 февраля 2020

Я реализую LSTM и обучаю его с fit_generator(). Я использую fit_generator(), потому что у меня есть набор данных, состоящий из предложений, в которых одно предложение состоит из переменного числа слов, поэтому мне нужно вычислить потерю после каждого предложения, и мне нужно передать в LSTM вход переменный размер. (пример: 6 слов, 8 слов ...). Я заметил, что обучение идет медленно, и я прочитал, что, возможно, мотивация заключается в небольшом количестве сэмплов, обрабатываемых за один раз (слова предложения), но я должен сделать это таким образом. Теперь я перешел от LSTM к CuDNNLSTM, но ситуация, похоже, не изменилась.

Вот код:

def data_generator(batch_count, training_dataset, training_dataset_labels):
  while True:
    start_range = 0
    for batch in batch_count:
      end_range = (start_range + batch[1])
      batch_dataset = training_dataset[start_range:end_range, :]
      batch_labels = training_dataset_labels[start_range:end_range]
      start_range = end_range
      yield batch_dataset, batch_dataset

model = tf.keras.Sequential([
    tf.keras.layers.CuDNNLSTM(units=20, input_shape=(None, 1))
])

sgd_optimizer = tf.keras.optimizers.SGD(lr=0.001, decay=1e-2, momentum=0.5, nesterov=True)

model.compile(loss = listnet_loss, optimizer=sgd_optimizer)
model.summary()
MAX_EPOCHS = 10
real_labels = np.array([])
losses = np.array([])

with tf.device('/GPU:0'):
  model.fit_generator(data_generator(training_dataset_words_in_sentence_count, training_dataset, training_dataset_labels),
                      epochs=50, workers=10, verbose=2, steps_per_epoch=len(training_dataset))

Есть ли способ ускорить обучение? Заранее спасибо.

...