Как изменить длину ввода в слое встраивания для каждого пакета?

#keras

#keras

Вопрос:

Я разрабатываю слой встраивания, где словарный запас составляет ~ 4000, а большинство обучающих примеров имеют короткую длину менее 10. Однако некоторые примеры имеют длину 100 или, возможно, даже несколько сотен, и я хотел бы избежать заполнения нулем каждого отдельного примера до длины 100 , чтобы поддерживать постоянную длину ввода во всех примерах.

Чтобы исправить это, я хотел бы заполнять только на основе максимальной длины в пакете, так что почти все пакеты будут иметь длину ввода ~ 10, и только в нескольких пакетах будет много заполнения. Как мне загружать в каждый пакет с разной длиной ввода в слой встраивания?

Комментарии:

1. Вы пытаетесь выполнить пакетное обучение? Я хочу выполнить пакетное обучение с использованием fit_generator , но я не знаю, как это сделать, когда модель содержит слой встраивания. Как я могу даже скомпилировать модель, если я не знаю параметров встраивания (например, длину ввода)?

Ответ №1:

Один из возможных способов — установить для аргумента input_length значение None. Но если вы собираетесь использовать плотные и сглаженные слои после этого слоя, они могут не сработать. Для получения дополнительной информации посетите страницу документа keras

… Этот аргумент необходим, если вы собираетесь подключать слои Flatten, а затем Dense выше по потоку (без него форма выходных данных dense не может быть вычислена)

 model = keras.models.Sequential(
    [
      keras.layers.Embedding(voc_size, embedding_dim, input_length=None)
    ]
)
  

Теперь модель может принимать последовательности переменной длины.

Комментарии:

1. Может ли переменный ввод работать только с плотными слоями (т. Е. не сглаживать)?

2. Боюсь, что нет. Это может даже не работать с LSTM, когда значение return_sequences равно False.