试图了解TimeDistributed
中Tensorflow(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))
是完全相同的,并且可以使用它们中的任何一个。我的假设正确吗?