问题标签 [dqn]

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 投票
1 回答
141 浏览

python - 理解和评估强化学习中的不同方法

我一直在尝试使用不同的变体在 Python 上实现强化学习算法,例如Q-learning,和. 考虑一个推车杆示例并评估每个变体的性能,我可以考虑绘制(附上绘图图片)和实际图形输出,其中杆在推车移动时的稳定性如何。Deep Q-NetworkDouble DQNDueling Double DQNsum of rewardsnumber of episodes 评估强化学习模型

但是这两个评估在定量解释更好的变体方面并不真正感兴趣。我是强化学习的新手,并试图了解是否有任何其他方法可以在同一问题上比较 RL 模型的不同变体。

我指的是 colab 链接https://colab.research.google.com/github/ageron/handson-ml2/blob/master/18_reinforcement_learning.ipynb#scrollTo=MR0z7tfo3k9C上的所有车杆示例变体的代码。

0 投票
0 回答
298 浏览

tensorflow - 使用 GPU 和 Keras 进行强化学习

我正在使用这段代码(请原谅它的混乱)在我的 CPU 上运行。我有一个我自己创建的自定义 RL 环境,我正在使用 DQN 代理。

但是当我在 GPU 上运行这段代码时,它并没有使用太多,实际上它比我的 CPU 慢。

这是 的输出nvidia-smi。如您所见,我的进程正在 GPU 上运行,但速度比我预期的要慢得多。

谁能指出我可以做些什么来更改我的 GPU 功能代码?

PS:请注意,我有两个 GPU,并且我的进程都在它们上运行。即使我使用两个 GPU 中的任何一个,问题是我的 GPU 没有被使用并且速度比 GPU 相对慢,所以两个 GPU 不是问题

0 投票
0 回答
838 浏览

python - 如何获得 Openai 健身房空间的维度。使用 Keras 构建神经网络时在 DQN 中使用的元组

我用 Openai Gym spaces.Tuple 构建了一个自定义环境,因为我的观察是由:小时(0-23)、日(1-7)、月(1-12)组成的,它们是离散的;四个连续数字,来自 csv 文件;和一个形状数组 (4*24),它们也来自一个 csv 文件。

这是我从 csv 文件中读取数据的 reset() 函数:

为了训练代理,我想使用 DQN 算法,它是来自keras-rl 库的 DQNAgent 这是我构建神经网络模型的代码:

据我了解,spaces.Tuple 实例没有 shape() 方法,len方法返回元组中的空格数。例如在我的环境中 len = 5

但是要构建神经网络,我似乎需要 4 + 4*24 + 3 = 103 个输入神经元。我试图将输入维度硬编码为:

但我收到以下错误:

ValueError:检查输入时出错:预期 flatten_1_input 的形状为 (1, 103),但得到的数组的形状为 (1, 5)。

所以我然后尝试:

但我也得到了错误:

TypeError: only size-1 arrays can be convert to Python scalars 以上异常是以下异常的直接原因: Traceback (最近一次调用 last): File "C:/Users/yuche/Dropbox/risk hedging/rl-project /DqnDAMarketAgent.py",第 37 行,在 dqn.fit(env,nb_steps=1440,visualize=True,verbose=2) 文件“C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl \core.py",第 169 行,适合动作 = self.forward(observation) 文件 "C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl\agents\dqn.py",行228,在前向 q_values = self.compute_q_values(state) 文件“C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl\agents\dqn.py”,第 69 行,在 compute_q_values q_values = self .compute_batch_q_values([state]).flatten() 文件“C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\rl\agents\dqn.py”,第 64 行,compute_batch_q_values q_values = self.model.predict_on_batch(batch) 文件“C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\keras\engine\training.py”,第 1580 行,在 predict_on_batch 输出 = self.predict_function(ins) 文件“C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\tensorflow\python\keras\backend.py”,第 3277 行,在调用 dtype=tensor_type.as_numpy_dtype)) 文件“C:\Users\yuche\anaconda3\envs\py37\lib\site-packages\numpy\core_asarray.py”,第 83 行,在 asarray 返回数组(a,dtype,copy= False, order=order) ValueError: 使用序列设置数组元素。

我用谷歌搜索了这个错误并找到了可能的原因:

当您定义或构建的函数期望任何单个参数但获得一个数组时,就会发生这种情况。

看来我仍然需要 103 而不是 5 个神经元作为输入,但是 Tuple 直接将两个数组馈入网络。我想知道,DQN 中 Tuple 的典型用法是什么?

顺便说一句,我想出了一个使用 Spaces.Box 而不是 Spaces.Tuple 的方法:

但这似乎不是最理想的方式。

提前致谢!

0 投票
1 回答
33 浏览

python - 强化学习 DQN 环境结构

我想知道如何最好地将我的 DQN 代理对其环境所做的更改反馈给它自己。

我有一个电池模型,代理可以观察到 17 个步骤和 5 个特征的时间序列预测。然后它决定是充电还是放电。

我想将其当前的充电状态(空、半满、满等)包含在其观察空间中(即在我提供给它的 (17,5) 数据帧内的某个位置)。

我有几个选项,我可以将一整列设置为充电状态值,一整行,或者我可以展平整个数据框并将一个值设置为充电状态值。

这些是不明智的吗?将整个列设置为单个值对我来说似乎有点初级,但它真的会影响性能吗?由于我计划使用 conv 或 lstm 层(尽管当前模型只是密集层),因此我对将整个事物展平持谨慎态度。

0 投票
0 回答
71 浏览

tensorflow - 为什么我的 DQN 模型会做出明显错误的决定?

我试图在 python 中实现一个由 tensorflow 模型玩的简单的回合制蛇游戏:代理可以在板上移动(例如 40x40 单元格),在每个访问的单元格处留下痕迹。在每一轮中,智能体必须选择三个可能的动作之一(动作空间:左转、右转、什么都不做),然后朝当前方向移动。智能体的目标是尽可能长时间地生存,并且不与自己的轨迹、棋盘墙或其他玩家的轨迹发生碰撞。每次代理死亡时,它都会获得很大的负面奖励,因为它应该学会在未来不做同样的动作。

通过长时间的训练,我看到了显着的学习进步(生存时间增加),但我也做了一个我不明白的观察:

在某些情况下,模型做出明显错误的决定,即有几个选项,但它选择了立即导致死亡的动作。更糟糕的是,这个致命决定的 q 值(softmaxed)是 1.0(100%)!

目前模型看起来像:

输入层是棋盘的一部分(11 x 11),中间是代理加上代理方向(one-hot)。

当然,我尝试了一些模型变化(层大小、隐藏密集层的数量),但到目前为止还没有成功。

我的一般问题是这种错误学习行为的可能原因是什么?

0 投票
0 回答
213 浏览

tensorflow - 如何在 TF-Agents 框架中提取 DQN 代理的权重?

我正在使用 TF-Agents 解决自定义强化学习问题,我在自定义环境中的一些特征上训练 DQN(使用 TF-Agents 框架中的 DqnAgents 构建),并分别使用 keras 卷积模型从图像中提取这些特征. 现在我想将这两个模型组合成一个模型并使用迁移学习,我想初始化网络第一部分(图像到特征)的权重以及第二部分的权重,这将是 DQN前一种情况下的层。

我正在尝试使用 keras.layers 构建这个组合模型,并使用 Tf-Agents tf.networks.sequential 类对其进行编译,以将其传递给 DqnAgent() 类时所需的必要形式。(我们称这个陈述为(a))。

我能够使用权重初始化图像特征提取器网络的层,因为我将其保存为 .h5 文件并且能够获得相同的 numpy 数组。所以我可以为这部分做迁移学习。

问题在于 DQN 层,我使用规定的 Tensorflow Saved Model Format (pb) 保存了上一个示例中的策略,它为我提供了一个包含模型属性的文件夹。但是,我无法以这种方式查看/提取我的 DQN 的权重,并且推荐的 tf.saved_model.load('policy_directory') 对于我可以看到的有关该策略的哪些数据并不是真正透明的。如果我必须像语句 (a) 中那样遵循迁移学习,我需要提取我的 DQN 的权重并将它们分配给新网络。对于需要应用迁移学习的这种情况,文档似乎非常稀少。

任何人都可以通过解释我如何从保存模型方法(从 pb 文件)中提取权重来帮助我吗?或者有没有更好的方法来解决这个问题?

0 投票
0 回答
105 浏览

python - Keras Double DQN 平均奖励随时间递减且无法收敛

我正在尝试教一个 Double DQN 代理运行一个网格世界,其中有一个搜索者(代理)将尝试收集所有随机产生的隐藏者。每一步的 path_cost 为 -0.1,如果收集到一个躲藏者,则会收到 1 的奖励。DQN 网络接收一个形状为 (world_width,world_height,1) 的数组作为状态,它是从上面看到的环境的完整转换,其中空白空间被描述为 0,搜索者为 2,隐藏者为 3。代理是然后应该选择一个动作,左,上,右或下。环境的示例配置如下图所示。

网格世界

然而,当训练我的代理时,奖励最初会随着探索的减少而减少,因此可以假设当代理遵循 DQN 网络时,它的表现会比随机选择动作时更差。以下是我在使用不同超参数进行训练时收到的奖励图的一些示例(y 轴是总步数,每集是 100 步,除非它完成)。

奖励图

正如所见,代理在解决环境方面变得更糟,大约在epsilon等于我min_epsilon的时候曲线稳定(意味着几乎没有探索或随机移动)。

我尝试了不同的超参数,但结果没有任何明显差异,如果有人能给我指出问题所在的指针,我将不胜感激。

我主要使用的超参数是:

这是我的代码:

0 投票
1 回答
323 浏览

python - How to build a DQN that outputs 1 discrete and 1 continuous value as a pair?

I am building a DQN for an Open Gym environment. My observation space is only 1 discrete value but my actions are:

ex: [1,56], [0,24], [2,-78]...

My current neural network is:

(I copied it from a tutorial that only outputs 1 discrete value in the range [0,1]}

I understand that I need to change the last layer of my neural network but what would it be in my case?

My guess is that the last layer should have 3 binary outputs and 1 continuous output but I don't know if it is possible to have different natures of outputs within the same layer.

0 投票
0 回答
51 浏览

r - 使用神经网络更新 R 中的 DQN

我正在尝试使用该neuralnet包在 R 中实现一个简单的深度 Q 学习案例。

我有一个具有初始随机权重的初始网络。我用它为我的代理生成一些经验,结果,我得到了状态和目标。然后我将状态拟合到目标并获得一个具有新权重的新网络。

我如何结合新的权重和初始权重?我是否只是保留新权重并丢弃初始权重?

0 投票
0 回答
170 浏览

reinforcement-learning - openAI健身房的lunarlander连续超参数搜索

我正在尝试从开放的 AI 健身房解决 LunarLander 连续环境(解决 LunarLanderContinuous-v2 意味着在 100 次连续试验中获得 200 的平均奖励。)从该环境中连续 100 集可能获得最佳平均奖励。困难在于我提到的月球着陆器是不确定的。(解释:现实物理世界中的观察有时是嘈杂的)。具体来说,我在对着陆器位置的 PositionX 和 PositionY 观察中添加了一个均值 = 0 且标准值 = 0.05 的零均值高斯噪声。我还将 LunarLander 动作离散化为有限数量的动作,而不是环境启用的连续范围。

到目前为止,我正在使用 DQN、双 DQN 和决斗 DDQN。

我的超参数是:

  • 伽玛,
  • ε开始
  • ε端
  • ε衰变
  • 学习率
  • 动作数量(离散化)
  • 目标更新
  • 批量大小
  • 优化器
  • 集数
  • 网络架构。

我很难达到好的甚至平庸的结果。有人对我应该为改善结果而进行的超参数更改有什么建议吗?谢谢!