Форма слоев LSTM в многослойной модели LSTM

#tensorflow #keras #deep-learning #lstm #recurrent-neural-network

#tensorflow #keras #глубокое обучение #lstm #рекуррентная нейронная сеть

Вопрос:

     model = tf.keras.Sequential([tf.keras.layers.Embedding(tokenizer.vocab_size, 64),tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(64,return_sequences=True))     
    tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(32)),
    tf.keras.layers.Dense(64, activation='relu'),
    tf.keras.layers.Dense(1, activation='sigmoid')
    ])
  

Второй слой содержит 64 скрытых элемента, и поскольку return_sequences=True, он также будет выводить 64 последовательности. Но как это может быть передано в 32 скрытых модуля LSTM. Не приведет ли это к ошибке несоответствия формы?

Ответ №1:

На самом деле нет, это не вызовет этого. Прежде всего, второй слой будет иметь форму вывода не 64 , а вместо 128 . Это связано с тем, что вы используете Bidirectional layer, он будет объединен прямым и обратным проходом, и поэтому ваш вывод будет (None, None, 64 64=128) . Вы можете обратиться к ссылке.

RNN Данные формируются следующим образом (Batch_size, time_steps, number_of_features) . Это означает, что при попытке соединить два слоя с разными нейронами характеристики увеличиваются или уменьшаются в зависимости от количества нейронов.Вы можете перейти по конкретной ссылке для получения более подробностей.

И для вашего конкретного кода вот как будет выглядеть сводка модели. Итак, чтобы ответить вкратце, это не будет несоответствием.

 Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None, None, 64)          32000     
_________________________________________________________________
bidirectional (Bidirectional (None, None, 128)         66048     
_________________________________________________________________
bidirectional_1 (Bidirection (None, 64)                41216     
_________________________________________________________________
dense_2 (Dense)              (None, 64)                4160      
_________________________________________________________________
dense_3 (Dense)              (None, 1)                 65        
=================================================================
Total params: 143,489
Trainable params: 143,489
Non-trainable params: 0
_________________________________________________________________
  

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

1. «Это означает, что при попытке соединить два слоя с разными нейронами характеристики увеличиваются или уменьшаются в зависимости от количества нейронов» Я не понял это утверждение

2. ооо, ладно, понял. Итак, в принципе, если у меня есть 10 объектов во входных данных, но нейроны, которые я установил как 8. будет ли это искажать оставшиеся 2 объекта?