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_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 documentation.
我正在使用 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_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 documentation.