Невозможно понять формы вывода в сети LSTM ниже - PullRequest
1 голос
/ 27 мая 2020

Я пытался обучить двунаправленный LSTM, используя керасы TensorFlow v2 для классификации текста. Ниже представлена ​​архитектура:

  model1 = Sequential()
  model1.add(Embedding(vocab, 128,input_length=maxlength))

  model1.add(Bidirectional(LSTM(32,dropout=0.2,recurrent_dropout=0.2,return_sequences=True)))
  model1.add(Bidirectional(LSTM(16,dropout=0.2,recurrent_dropout=0.2,return_sequences=True)))
  model1.add(GlobalAveragePooling1D())
  model1.add(Dense(5, activation='softmax'))
  model1.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

  model1.summary()

Теперь это сводные детали, в которых я запутался

enter image description here

Мои сомнения связаны к выходным формам слоев BiLSTM. Как они есть (283,64) и (283,32), хотя количество используемых единиц составляет 32 и 16 соответственно для 2 слоев. Здесь maxlength = 283, vocab = 19479

Ответы [ 2 ]

2 голосов
/ 27 мая 2020

Я считаю, что объяснение этого результата заключается в двунаправленной природе слоев LSTM, которые вы добавили в свою нейронную сеть: размер добавленного вами слоя удваивается, чтобы слой также изучал последовательность в обратном направлении. Надеюсь, вы понимаете, если у вас есть вопросы, вы можете задать мне их в комментариях.

1 голос
/ 27 мая 2020

Это из-за Bidirectional. Если вы удалите его, вы увидите, что формы вывода: (283,32) и (283,16) . Bidirectional создает дополнительный слой

...