python - 在 softmax 层之前添加 LSTM 层
问题描述
我想在 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))
解决方案
我仍然不太明白在 Dense 之后附加 LSTM 的目的,但是可以解释该错误:
因为在 Keras 中,LSTM 接受(?, m, n)
需要 3 个维度的输入张量,而 Dense 的输出是具有 2 个维度的 (?, p)。
您可能想尝试嵌入或重塑图层,例如:
model.add(Embedding(512, 64, input_length=512))
或者
model.add(Reshape((512, 64)))
最好检查一些使用 LSTM 的示例:https ://github.com/keras-team/keras/tree/master/examples
推荐阅读
- linux - 哪些库应该作为依赖项进入 pkg-config 文件?
- ip - 在 Netty 中进行 ocsp 时获取客户端 IP
- python - zipfile 将 .zip 输出写入 .py 文件位置
- spring - 在 Spring Security 中仅使用用户名登录
- java - Apache Flink:具有并行性的有序时间戳
- c++ - 专业化错误:模板成员函数和重载的非模板函数之间的冲突
- api - 如何在 Django REST framework API 中为 GET 方法设置权限 PUBLIC 和为 POST 方法设置权限
- docker - 卡夫卡生产者说“unknown_topic_or_partition”
- html - 单击角度6中的按钮后如何用另一个图像替换图像?
- c++ - 绝对比例 - 旋转比例矢量