我的问题是从 LSTM 中获取所有隐藏输出,并将它们用作单个密集层的训练示例。展平隐藏层的输出并将它们馈送到密集层并不是我想要做的。我尝试了以下几件事:
A). model.add(LSTM(NUM_LSTM_UNITS, return_sequences=True, activation='tanh')) #
B). model.add(Lambda(lambda x: x, output_shape=lambda x: (x[0]*x[1], x[2])))
C). model.add(Dense(NUM_CLASSES, input_dim=NUM_LSTM_UNITS))
(A) 打印后的 mode.output_shape: (BATCH_SIZE, NUM_TIME_STEPS, NUM_LSTM_UNITS) 和 (B) 打印后的 model.output_shape: (BATCH_SIZE*NUM_OF_TIMESTEPS, NUM_LSTM_UNITS)
这正是我想要实现的目标。
不幸的是,当我尝试运行步骤 (C) 时。我收到以下错误:
Input 0 is incompatible with layer dense_1: expected ndim=2, found ndim=3
这令人困惑,因为当我在 (B) 之后打印 model.output_shape 时,我确实看到了 (BATCH_SIZE*NUM_OF_TIMESTEPS, NUM_LSTM_UNITS),它是 ndim=2。
真的很感谢任何帮助。
编辑:当我尝试使用功能 API 而不是顺序模型时,我仍然在步骤 (C) 上遇到相同的错误
最佳答案
您可以使用包含 batch_size 维度的后端 reshape 。
def backend_reshape(x):
return backend.reshape(x, (-1, NUM_LSTM_UNITS))
model.add(Lambda(backend_reshape, output_shape=(NUM_LSTM_UNITS,)))
关于keras - 如何在 Keras 中更改中间层的批量大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41291937/