0

我正在尝试使用 Keras-rl 实现 DQN 代理。问题是当我定义我的模型时,我需要在架构中使用 LSTM 层:

model = Sequential()
model.add(Flatten(input_shape=(1, 8000)))
model.add(Reshape(target_shape=(200, 40)))
model.add(LSTM(20))
model.add(Dense(3, activation='softmax'))
return model

执行 rl-agent 我得到以下错误:

RuntimeError: Attempting to capture an EagerTensor without building a function.

这与 LSTM 的使用和以下代码行有关:

tf.compat.v1.disable_eager_execution()

使用密集层而不是 LSTM:

model = Sequential()
model.add(Flatten(input_shape=(1, 8000)))
model.add(Dense(20))
model.add(Dense(3, activation='softmax'))
return model

并保持禁用急切执行我没有以前报告的错误。如果我删除使用 LSTM 层禁用急切执行,我会遇到其他错误。

谁能帮我理解错误的原因?

4

3 回答 3

1

keras-rl库没有明确支持 TensorFlow 2.0,因此它不适用于此类版本的 TensorFlow。该库很少更新,最后一个版本大约有 2 年的历史(从 2018 年开始),所以如果你想使用它,你应该使用 TensorFlow 1.x

于 2020-01-22T16:13:58.113 回答
1

从 github 安装 keras-rl2 支持 tensorflow 2.x

于 2020-05-03T11:29:39.353 回答
0

尽管可以迁移 keras-rl 的代码以使用急切执行,因此可以使用 LSTM。LSTM 需要用一整集的学习来更新,以证明 keras-rl 不支持的东西是准确的。在此处查看更多信息:https ://github.com/keras-rl/keras-rl/issues/41

于 2020-04-06T13:23:04.303 回答