繁体   English   中英

输入层和第一个 LSTM 层的 Keras 功能 API 问题

[英]Keras Functional API issue with Input layer and first LSTM layer

我正在尝试创建一个功能 API,而不是顺序 API。 我之前使用 Sequential API 构建了模型,并且效果很好。 它是一个 LSTM,我在处理从 Input 到 LSTM 层的 batch_size 时遇到了问题。 Sequential API 构建如下:

new_model = Sequential()
new_model.add(LSTM(n_neurons, batch_input_shape=(batch_size,train_X.shape[1], train_X.shape[2]), activation='tanh', stateful=True, return_sequences=True))
new_model.add(Dropout(0))
new_model.add(LSTM(n_neurons, batch_input_shape=(batch_size,train_X.shape[1], train_X.shape[2]), activation='tanh', stateful=True))
new_model.add(Dropout(0))
new_model.add(Dense(n_neurons1, activation='tanh'))
new_model.add(Dropout(0.1))
new_model.add(Dense(nm))
new_model.compile(loss='mse', optimizer=optimizer)

上面的代码片段工作正常。 我试图开始工作的功能 API 如下:

inp = Input(shape = (train_X.shape[1], train_X.shape[2]), batch_size = batch_size)
L1 = LSTM(n_neurons, batch_input_shape=(batch_size,train_X.shape[1], train_X.shape[2]), activation='tanh', stateful=True, return_sequences=True)(inp)
D1 = Dropout(0)(L1)
L2 = LSTM(n_neurons, batch_input_shape=(batch_size,train_X.shape[1], train_X.shape[2]), activation='tanh', stateful=True, return_sequences=True)(D1)
D2 = Dropout(0)(L2)
F1 = Dense(n_neurons1, activation='tanh')(D2)
D3 = Dropout(0.1)(F1)
out = Dense(nm)
new_model = Model(inp,out)
new_model.compile(loss='mse', optimizer=optimizer)

我收到一条错误消息,指出“Input() 得到了一个意外的关键字参数‘batch_size”,即使我知道 batch_size 是输入层的参数。 然后,如果我摆脱了这个论点,我会收到第一个 LSTM 层的错误消息:

“如果 RNN 是有状态的,它需要知道它的批量大小。指定输入张量的批量大小:

  • 如果使用 Sequential 模型,请通过将batch_input_shape参数传递给第一层来指定批次大小。
  • 如果使用函数式 API,请通过将batch_shape参数传递给您的输入层来指定批量大小。”

我已经尝试过更新 tensorflow 但这并没有解决 Input() 问题。 我从这里去哪里?

您描述了通过功能 API 传递batch_size参数并收到错误提示“将batch_shape参数传递给您的输入层”。

如果您尝试将输入层中的batch_size = batch_size更改为

batch_shape = (batch_size,train_X.shape[1], train_X.shape[2])

这能解决吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM