我想在softmax层之前添加一个LSTM层,以便可以跟踪序列的上下文并将其用于预测。以下是我的实现,但每次都会收到以下错误。请帮助我解决此错误。
ValueError:输入0与lstm_1层不兼容:预期ndim = 3,找到的ndim = 2
common_model = Sequential()
common_model.add(Conv2D(32, (3, 3), input_shape=self.state_size, padding='same', activation='relu'))
common_model.add(Dropout(0.2))
common_model.add(Conv2D(32, (3, 3), activation='relu', padding='same'))
common_model.add(MaxPooling2D(pool_size=(2, 2)))
common_model.add(Flatten())
common_model.add(Dense(512, activation='relu'))
common_model.add(Dropout(0.5))
common_model.add(Dense(512, activation='relu'))
common_model.add(Dropout(0.5))
common_model.add(Dense(512, activation='relu'))
common_model.add(Dropout(0.5))
agent_model = Sequential()
agent_model.add(common_model)
agent_model.add(LSTM(512, return_sequences=False))
agent_model.add(Dense(self.action_size, activation='softmax'))
agent_model.compile(loss='categorical_crossentropy', optimizer=Adam(lr=self.agent_learning_rate))
critic_model = Sequential()
critic_model.add(common_model)
critic_model.add(Dense(1, activation='linear'))
critic_model.compile(loss="mse", optimizer=Adam(lr=self.critic_learning_rate))
答案 0 :(得分:1)
我仍然不太了解在Dense之后附加LSTM的目的,但是可以解释该错误:
由于在Keras中,LSTM接受输入张量,如(?, m, n)
,它需要具有3个暗角,而Dense的输出是(?,p),它具有2个暗角。
您可能要尝试嵌入或重塑图层,例如:
model.add(Embedding(512, 64, input_length=512))
或
model.add(Reshape((512, 64)))
另外,最好检查一下使用LSTM的一些示例:https://github.com/keras-team/keras/tree/master/examples