具有密集层的 Keras 中的时间分布式层

时间:2021-03-30 07:17:50

标签: tensorflow keras deep-learning neural-network lstm

试图了解TimeDistributedTensorflow(Keras)层的影响。

例如,考虑以下网络:

输入:

voc_size = 10000 ; embed_dim = 64
lstm_units = 75 ; size_batch = 30 ; count_classes = 5

型号:

from tensorflow.keras.layers import ( Bidirectional, LSTM, 
                                Dense, Embedding, TimeDistributed )
from tensorflow.keras import Sequential

def sample_build(embed_dim, voc_size, batch_size, lstm_units, count_classes):
    model = Sequential()
    model.add(Embedding(input_dim=voc_size, 
                     output_dim=embed_dim,input_length=50))
    model.add(Bidirectional(LSTM(units=lstm_units,return_sequences=True),
                                         merge_mode="ave"))
    
    #THE_LINE
    model.add(TimeDistributed(Dense(count_classes)))

    # Compile model
    model.compile(loss='categorical_crossentropy', 
                      optimizer='rmsprop', 
                      metrics=['accuracy'])
    model.summary()
    return model 


sample_model = sample_build(embed_dim,voc_size, 
                                    size_batch, rnn_units,
                                    count_classes)

在模型摘要中,无论有没有 OUTPUT_SHAPE,我都获得了与 final_dense_layer ==> (None,50,5) 完全相同的 TimeDistributed,并且我能够在这两种情况下为 NER 任务训练模型没有任何错误的情况。那么这个 TimeDistributed 的目的是什么。

我为 official documentation 层尝试了 Time Distributed,但它仍然没有解释这个网络如何在两种情况下使用相同的输出形状 (with and without TimeDistributed)

编辑:1

经过一些研究,我发现如果 return_sequences==True) 在前一个 BiLSTM 层,那么 Dense(n)TimeDistributed(Dense(n)) 是完全相同的,并且可以使用它们中的任何一个。我的假设正确吗?

0 个答案:

没有答案