如何在Keras LSTM中获得几个时间步长的输出?

时间:2019-07-08 07:57:36

标签: python keras lstm

我想对数据的时间范围进行分类。例如,每5个输入就有一个输出。但是我的代码拒绝接受我的输出。

model = Sequential()
model.add(GRU(32, input_shape=(TimeStep.TIME_STEP + 1, 10), return_sequences=True, activation='relu'))
model.add(GRU(64, activation='relu', return_sequences=True))
model.add(Dense(2, activation='hard_sigmoid'))

model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=[categorical_accuracy])
history = model.fit(TimeStep.fodder, TimeStep.target, epochs=50)

错误:

ValueError: Error when checking target: expected dense_1 to have shape (5, 2) but got array with shape (31057, 2)

它确实有31057个数据点,每个数据点都包含5个连续数据。

1 个答案:

答案 0 :(得分:0)

GRU层中的return_sequences参数指示模型在每个时间步返回状态,而不是最终激活。

如果在第二个GRU中将该标志设置为False,则模型将返回您期望的形状。 提示:使用model.summary()显示图层的输出形状。

对于具有类别损失的模型,您希望输出层激活是softmax而不是Sigmoid。