我正在使用 LSTM 進行假新聞檢測,并在我的模型中添加了一個嵌入層。
沒有在 LSTM 函式中添加任何 input_shape 就可以正常作業,但我認為該input_shape引數是必需的。有人能幫我解釋為什么即使沒有定義也沒有錯誤input_shape嗎?是因為嵌入層隱式定義了input_shape?
以下是代碼:
model=Sequential()
embedding_layer = Embedding(total_words, embedding_dim, weights=[embedding_matrix], input_length=max_length)
model.add(embedding_layer)
model.add(LSTM(64,))
model.add(Dense(1,activation='sigmoid'))
opt = SGD(learning_rate=0.01,decay=1e-6)
model.compile(loss = "binary_crossentropy", optimizer = opt,metrics=['accuracy'])
model.fit(data,train['label'], epochs=30, verbose=1)
uj5u.com熱心網友回復:
你只需要提供input_length給Embedding層。此外,如果您使用sequential模型,則不需要提供輸入層。避免輸入層本質上意味著您的模型權重僅在您傳遞真實資料時創建,就像您在model.fit(*). 如果您想在提供真實資料之前查看模型的權重,則必須在您的Embedding層之前定義一個輸入層,如下所示:
embedding_input = tf.keras.layers.Input(shape=(max_length,))
是的,正如您所提到的,input_shape當您提供真實資料時,您的模型會隱式推斷。您的LSTM層不需要 ,input_shape因為它也是基于Embedding層的輸出派生的。如果該LSTM層是模型的第一層,input_shape為了清楚起見,最好指定一個。例如:
model = tf.keras.Sequential()
model.add(tf.keras.layers.LSTM(32, input_shape=(10, 5)))
model.add(tf.keras.layers.Dense(1))
其中 10 表示時間步數,5 表示特征數。在您的示例中,您對LSTM圖層的輸入具有shape(max_length, embedding_dim). 同樣在這里,如果您沒有指定input_shape,您的模型將根據您的輸入資料推斷形狀。有關更多資訊,請查看 Keras檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/318298.html
上一篇:加載KerasClassifier后,在運行predict()時出現錯誤“KerasClassifier”物件沒有屬性“classes_”
