首页 > 解决方案 > Tensoflow2 LSTM - 未使用的参数 input_shape?

问题描述

所以我用以下代码构建了神经网络:

import tensorflow as tf

tf_model = tf.keras.Sequential()
tf_model.add(tf.keras.layers.LSTM(50, activation='relu'))
tf_model.add(tf.keras.layers.Dense(20, activation='relu'))
tf_model.add(tf.keras.layers.Dense(10, activation='relu'))
tf_model.add(tf.keras.layers.Dense(1, activation='linear'))
tf_model.compile(optimizer='Adam', loss='mse')

我的训练集形状如下:

>> ts_train_X.shape
(16469, 3, 21)

我已经阅读了很多关于 stackoverflow 的文章和问题,以便为 LSTM 带来正确的数据框。我发现的几乎每一页都指定了input_shape参数并将其传递给 LSTM(..) 或 Sequential(..)。

当我查看LSTM API时,我找不到对该参数的引用。我还瞥见了源代码,在我看来,形状似乎是自动推断出来的,但我不确定这一点。

这引出了我的问题:为什么我的代码有效?如果我没有指定 input_shape 参数,作为第一层的 LSTM 层如何知道我的输入的形状?


编辑:根据评论中的建议更改标题。

标签: pythontensorflowkerasdeep-learninglstm

解决方案


可以将参数input_shape提供给任何 kerasLayer子类的构造函数,因为这是定义 API 的方式。

代码之所以有效,是因为input_shape它作为关键字参数(**kwargs)传递,然后这些关键字参数由LSTM构造函数传递给Layer构造函数,然后构造函数继续存储信息以供以后使用。这实际上意味着input_shape参数不必在每一层中定义,而是作为关键字参数传递。

我认为问题在于,由于keras已移至tensorflow,文档可能不完整。您可以在顺序 API 指南中找到有关该input_shape参数的更多信息。


推荐阅读