所以我用以下代码构建了神经网络:
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层如何知道我输入的形状
编辑:根据评论中的建议更改标题。
参数input_shape
可以提供给任何kerasLayer
子类的构造函数,因为API就是这样定义的。
该代码之所以有效,是因为input_shape
是作为关键字参数(**kwargs
(传递的,然后这些关键字参数由LSTM
构造函数传递给Layer
构造函数,然后后者继续存储信息以供以后使用。这实际上意味着input_shape
参数不必在每一层中定义,而是作为关键字参数传递。
我认为问题是,由于keras
已移动到tensorflow
,因此文档可能不完整。您可以在顺序API指南中找到有关input_shape
参数的更多信息。