我想用Keras創建一個有狀態的LSTM,但我不明白如何在LSTM運行之前添加嵌入層。問題似乎是stateful
標誌。如果我的網絡不是有狀態的,那麼添加嵌入層是非常直接的,並且可行。有嵌入層的有狀態LSTM(形狀不匹配)
不嵌入層的工作狀態LSTM着眼於這樣的時刻:
model = Sequential()
model.add(LSTM(EMBEDDING_DIM,
batch_input_shape=(batchSize, longest_sequence, 1),
return_sequences=True,
stateful=True))
model.add(TimeDistributed(Dense(maximal_value)))
model.add(Activation('softmax'))
model.compile(...)
當添加嵌入層I移動至batch_input_shape
參數到嵌入層即只需要已知的形狀的第一層? 像這樣:
model = Sequential()
model.add(Embedding(vocabSize+1, EMBEDDING_DIM,batch_input_shape=(batchSize, longest_sequence, 1),))
model.add(LSTM(EMBEDDING_DIM,
return_sequences=True,
stateful=True))
model.add(TimeDistributed(Dense(maximal_value)))
model.add(Activation('softmax'))
model.compile(...)
我得到知道唯一的例外是Exception: Input 0 is incompatible with layer lstm_1: expected ndim=3, found ndim=4
所以我在這裏停留在那一刻。將字嵌入結合到有狀態的LSTM中有什麼竅門?
你如何決定embedding_size或找出嵌入的向量的大小? – naisanza
@naisanza embedding_size是一個超參數。這意味着embedding_size取決於您的問題,您可以自由選擇它。 不幸的是,我無法給您一個關於如何選擇優秀超參數的一般性答案,但https://arxiv.org/pdf/1206.5533.pdf爲該主題提供了一個良好的開端。 – bruThaler