Я реализую 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))
Есть ли способ ускорить обучение? Заранее спасибо.