【问题标题】:Residual LSTM model building, getting syntax error残差 LSTM 模型构建,出现语法错误
【发布时间】:2021-05-30 19:03:45
【问题描述】:
X_train = np.reshape(X_train, (X_train.shape[0], 1, X_train.shape[1]))
X_test = np.reshape(X_test, (X_test.shape[0], 1, X_test.shape[1]))

尝试通过包装类在残差(跳过连接)LSTM 模型上训练我的数据集:

import tensorflow as tf
class ResidualWrapper(tf.keras.Model):
def __init__(self, model):
    super().__init__()
    self.model = model

def call(self, inputs, *args, **kwargs):
    delta = self.model(inputs, *args, **kwargs)

每个时间步的预测是前一个时间步的输入加上模型计算的增量。

return inputs + delta


residual_lstm = ResidualWrapper(
model = Sequential()
model.add(Bidirectional(LSTM(64,input_shape=(X_train.shape[1], X_train.shape[2]))))
model.add(Dropout(0.2))
model.add(Dense(1))
model.compile(loss='mean_squared_error', optimizer='adam'))
history = model.fit(X_train, Y_train, epochs=10, batch_size=64, validation_data=(X_test, Y_test), 
                    callbacks=[EarlyStopping(monitor='val_loss', patience=10)], verbose=1, shuffle=False)
model.summary()

#但在model.add(Bidirectional())处出现无效语法错误

【问题讨论】:

  • residual_lstm = ResidualWrapper(?包装的是什么?
  • 你可以在tensorflow.org/tutorials/structured_data/time_series中查看Residual Wrapper
  • 我的意思是这是无效的语法:ResidualWrapper(model = Sequential() model.add(...。你应该像ResidualWrapper(model) 一样使用它

标签: python numpy lstm recurrent-neural-network


【解决方案1】:

总结一下这个问题,Keras 的顺序模型不支持非线性拓扑,就像您在此处尝试实现的架构一样。你可以做的就是改用 Keras 的功能 API 重写代码。原因是因为 model.Sequential() 意味着严格地只允许一层一层地构建,或者好,顺序地构建,并且通过剩余连接,您正在与块的开头建立额外的连接。 更多细节在 Keras 指南中:https://keras.io/guides/functional_api/

【讨论】:

  • 虽然此链接可能会回答问题,但最好在此处包含答案的基本部分并提供链接以供参考。如果链接页面发生更改,仅链接答案可能会失效。 - From Review
猜你喜欢
  • 2016-10-24
  • 1970-01-01
  • 2021-07-26
  • 2021-10-23
  • 1970-01-01
  • 2017-09-28
  • 1970-01-01
  • 2018-08-20
  • 2019-04-08
相关资源
最近更新 更多