keras LSTM 应该在没有 input_shape 参数的情况下工作吗?

is keras LSTM supposed to work without an input_shape parameter?

我正在使用 LSTM 进行假新闻检测,并在我的模型中添加了一个嵌入层。

在 LSTM 函数中不添加任何 input_shape 也能正常工作,但我认为 input_shape 参数是必需的。有人可以帮我解释为什么即使没有定义 input_shape 也没有错误吗?是不是因为embedding层隐式定义了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)

你只需要提供一个input_lengthEmbedding层。此外,如果您使用 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 documentation.