Keras: использование mask_zero с дополненными последовательностями по сравнению с одиночной последовательностью без дополнения

1

Я строю модель LSTM в Keras для классификации сущностей из предложений. Я экспериментирую как с нулевыми заполненными последовательностями, так и с параметром mask_zero, или генератором для обучения модели по одному предложению (или партиям предложений одинаковой длины) за один раз, поэтому мне не нужно заполнять их нулями.

Если я определяю свою модель как таковую:

model = Sequential()
model.add(Embedding(input_dim=vocab_size+1, output_dim=200, mask_zero=True,
                    weights=[pretrained_weights], trainable = True))
model.add(Bidirectional(LSTM(units=100, return_sequences=True, recurrent_dropout=0.1)))
model.add(Dropout(0.2))
model.add(Bidirectional(LSTM(units=100, return_sequences=True, recurrent_dropout=0.1)))
model.add(Dropout(0.2))
model.add(TimeDistributed(Dense(target_size, activation='softmax')))
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics = ['accuracy'])

Могу ли я ожидать, что дополненные последовательности с параметром mask_zero будут выполняться аналогично тому, как подавать модель без дополненных последовательностей по одному предложению за раз? По существу:

model.fit(padded_x, padded_y, batch_size=128, epochs=n_epochs,
 validation_split=0.1, verbose=1)

или же

def iter_sentences():
        while True:
            for i in range(len(train_x)):
                yield np.array([train_x[i]]), to_categorical([train_y[i]], num_classes = target_size)

model.fit_generator(iter_sentences(), steps_per_epoch=less_steps, epochs=way_more_epochs, verbose=1)

Я просто не уверен, есть ли общее предпочтение для одного метода по сравнению с другим, или точный эффект, который имеет параметр mask_zero для модели.

Примечание. Существуют небольшие различия параметров для инициализации модели, основанные на том, какой метод обучения я использую. Я оставил их для краткости.

Теги:
keras

1 ответ

2
Лучший ответ

Самой большой разницей будет производительность и стабильность обучения, в противном случае добавление, а затем маскировка - то же самое, что и обработка одного предложения во время.

  1. производительность. Ну, вы будете тренировать одну точку за раз, которая не может использовать какой-либо параллелизм, доступный на аппаратном обеспечении. Часто мы корректируем размер партии, чтобы получить максимальную производительность от машины во время обучения и прогнозирования.
  2. стабильность обучения: при установке размера партии до 1 вы больше не выполняете мини-пакетное обучение. Учебная процедура будет применять обновления после каждой точки данных, которая может быть вредной для импульсных алгоритмов, таких как Адам. Вместо этого накопление градиентов над партиями имеет тенденцию обеспечивать более стабильную конвергенцию, особенно если данные являются шумными.

Поэтому, чтобы ответить на вопрос, нет, вы не можете ожидать, что они будут действовать аналогичным образом.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню