问题标签 [keras-rl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
106 浏览

python - 使用缩放的 sigmoid 激活函数时的负输出

我正在使用 Keras-rl DDPG 代理来解决一个问题,其中我有连续状态和连续动作空间作为 3 个元素的数组。

我的动作空间值对每个元素都有限制,因此没有使用传统的 tanh 函数。我在演员 NN 最后一层实现了自定义 sigmoid 函数:

演员和评论家层看起来像这样:

来自 keras-rl 的 DDPG 代理

现在,Agent 不再获取 0 到 500 之间的操作输出值,而是显示如下值:

我不明白当我使用 sigmoid 作为激活层时代理如何产生负面行为?是代理是问题的根源吗?

0 投票
0 回答
465 浏览

python - 在没有健身房环境和调用 fit 的情况下训练 keras-rl DQNAgent

我在自动驾驶领域有一个基于代理的模型,我有 50 多个不同的代理。其中一个是“聪明人”,他使用 DQN 来选择动作,该 DQN 是通过包中定义DQNAgent的。keras-rl由于我有多个由模型运行的代理,因此我不能使用gym.Env,因为实际上模型执行代理的 step 方法,但没有代理执行环境的 step 方法,因为它通常在 RL 中。

所以。DQNAgent我在 keras类上做了一个小包装:

由于我也了解 Q-learning 和 DQN 的理论,我认为调用forward和类的backward方法DQNAgent足以完成这项工作。还有一些保存权重的方法,我在 1000 次迭代后保存它们,也target_update完成了。有 25 个离散动作,状态有 7 个数值。在模型计算出代理的新位置后,从模型接收奖励,然后她返回奖励,该奖励返回到backward方法中的 DQN。

从理论上讲,据我了解,这正是 DQN 的实际工作方式,因为下面有贝尔曼方程的所有组件,至少我在查看keras-rlgithub 上的源代码时有这样的印象。是的,我不使用fit方法,因为我不使用健身房环境,但我认为它实际上不是 100% 必需的。但是看着我的 DQN 测试的糟糕结果,我决定问一个问题:我的尝试是否失败,即没有gym.Envandfit方法根本不可能?或者也许有更聪明的方法来调整它?

0 投票
1 回答
91 浏览

python - 为什么 DQNAgent.fit 会向我的输入数据添加额外的维度?

我正在使用 Keras 的深度 q 学习代理之一:DQNAgent。当我将环境传递给 DQNAgent.fit 时,我收到以下错误:

/usr/local/lib/python3.7/dist-packages/tensorflow/python/keras/engine/training_utils_v1.py in standardize_input_data(数据,名称,形状,check_batch_axis,exception_prefix)

ValueError:检查输入时出错:预期的dense_18_input有2维,但得到了形状为(1、1、65)的数组

我的环境的状态和空间定义如下:

我正在使用以下模型:

我的环境的状态向量的形状为 (65,),但 fit 方法将其增强到 (1, 1, 65) - 导致形状不匹配。需要明确的是,self.state 作为来自环境的观察返回。有谁知道为什么会这样?

0 投票
1 回答
717 浏览

tensorflow - Keras-rl2 错误 AttributeError: 'Sequential' 对象没有属性 '_compile_time_distribution_strategy'

使用以下代码时,我收到此错误 AttributeError: 'Sequential' object has no attribute '_compile_time_distribution_strategy' with keras-rl2。

我已经搜索了整个互联网,但找不到解决方案。

完整的错误如下

0 投票
0 回答
82 浏览

tensorflow - 健身房(Open AI)环境状态改变形状

我制作了一个自定义环境并尝试对其进行 DQL,但经过一段时间的模拟,输入尺寸发生了变化。我认为这可能是模拟时间的原因,但有时 de dqn 能够成功重置环境。我将 Gym 用于自定义环境:

然后使用来自 tensorflow.keras 的简单 Secuential 模型

来自 Keras RL 的代理

但是当我尝试训练代理时,出现以下错误:

正如你所看到的,它运行了一段时间,它会重置几次,但由于某种原因,它会改变输入形状。

0 投票
0 回答
77 浏览

python - 自定义 OpenAI 环境。代理 / mosel 错误“无效形状”

有一个自定义环境。使用 Keras-rl 制作模型并训练代理

错误:

模型输出“Tensor("dense_2/BiasAdd:0", shape=(None, 1, 3), dtype=float32)" 的形状无效。DQN 期望模型对每个动作都有一个维度,在本例中为 3。

编辑:如果我将状态更改为 (3,),我会收到此错误:

检查输入时出错:预期的 dense_input 有 2 维,但得到的数组形状为 (1, 1, 3)

我想问题在于形状 n/或我如何实现观察状态。

总的来说,我返回的状态是 [[],[],[]]

环境:

型号及代理:

0 投票
0 回答
49 浏览

python - DQN 中的优先重播缓冲区集成似乎是错误的

我尝试更新keras-rl DQN 算法以使用优先级重播缓冲区。请看这段代码。

在片段代码中,我更新了我的 DQNAgent 的反向传播以使用优先级重播缓冲区,但我似乎在使用权重和更新优先级方面我的实现是错误的。

我认为下面的代码片段有问题

在上面的片段中,我使用的是来自 openai 基线的优先重播缓冲区,您可以从以下链接找到它的实现和与 dqn 的集成:

https://github.com/openai/baselines/blob/master/baselines/deepq/replay_buffer.py
https://github.com/openai/baselines/blob/master/baselines/deepq/deepq.py#L292,L303
https://github.com/openai/baselines/blob/ea25b9e8b234e6ee1bca43083f8f3cf974143998/baselines/deepq/build_graph.py#L317,L449

在上面的代码中,我使用 sample_weight 来设置由 Prioritized Replay Buffer 和 td_errors 给出的权重来更新优先级。如果错误,请帮助我更正我的代码。

0 投票
0 回答
48 浏览

r - 没有从 foreach 循环返回的 keras 模型

下面是一个简单的代码。

  1. 我正在尝试使用foreach循环并行化训练具有不同数量神经元的三个 ANN。
  2. 后来我试图预测使用models[[1]]

但我收到错误。foreach 模型的输出是类keras_training_history

0 投票
1 回答
85 浏览

python-3.x - 实时 keras rl DQN 预测

大家好,我按照该教程 https://www.youtube.com/watch?v=hCeJeq8U0lo&list=PLgNJO2hghbmjlE6cuKMws2ejC54BTAaWV&index=2 训练 DQN 代理一切正常

现在我不想做一个随机的选择,我想使用 DQN 而不必做

类似 dqn.predict 但我没有在他们的文档中发现你能帮忙吗

0 投票
1 回答
99 浏览

openai-gym - 在健身房训练具有多离散动作空间的 DQN 代理

我想用 Keras-rl 训练一个 DQN 代理。我的环境既有多离散的动作空间,也有观察空间。我正在修改此视频的代码:https ://www.youtube.com/watch?v=bD6V3rcr_54&t=5s

然后,我正在分享我的代码

使用 2 个元素进行初始化后,执行 5 个操作,我收到以下错误:

ValueError: Model output "Tensor("dense_2/BiasAdd:0", shape=(None, 1, 32), dtype=float32)" has invalid shape. DQN expects a model that has one dimension for each action, in this case [2 2 2 2 2]

我该如何解决这个问题。我很确定,因为我不完全了解如何将视频中的代码调整到 MultiDiscrete 动作空间。谢谢 :)