多层LSTM模型中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。会不会导致形状不匹配错误

解决方法

实际上不,它不会导致它。首先,第二层将不会具有64的输出形状,而是具有128的输出形状。这是因为您使用的是Bidirectional层,它将通过向前和向后的传递进行连接,因此您的输出将为(None,None,64+64=128)。您可以参考link

RNN数据的形状如下(Batch_size,time_steps,number_of_features)。这意味着当您尝试将具有不同神经元的两层连接时,功能会根据神经元的数量而增加或减少。您可以通过特定的链接获取更多details

对于您的特定代码,这就是模型摘要的外观。因此,简而言之,他们不会错配。

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
embedding (Embedding)        (None,64)          32000     
_________________________________________________________________
bidirectional (Bidirectional (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
_________________________________________________________________