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

标签 python tensorflow keras deep-learning lstm

我使用 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)

最佳答案

您只需向 Embedding 层提供 input_length 即可。此外,如果您使用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 .

关于python - keras LSTM 应该在没有 input_shape 参数的情况下工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69572108/

相关文章:

python - SQLAlchemy按多对多关系排序

python - dask 如何从调度器向 worker 分发数据?

python - 如何使用 flask+uwsgi 服务 tensorflow 模型?

python - 如何使用自定义数据集运行 Keras Retinanet 对象检测代码示例?

python - 计算特征和目标变量之间的相关性

python - 使用 inception V3 在 Tensorflow 中本地化对象

Tensorflow @tf.function - 无法在 Tensorflow 图形函数内获取 session

python - 我试图在神经网络训练中理解 'epochs'。接下来的实验是等价的吗?

python - 权重和内核调节器相同吗?

python - 带有测试语句的 while 循环的惯用 Python 版本的 Ruby 代码?