问题标签 [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.
python - 理解和评估强化学习中的不同方法
我一直在尝试使用不同的变体在 Python 上实现强化学习算法,例如Q-learning
,和. 考虑一个推车杆示例并评估每个变体的性能,我可以考虑绘制(附上绘图图片)和实际图形输出,其中杆在推车移动时的稳定性如何。Deep Q-Network
Double DQN
Dueling Double DQN
sum of rewards
number of episodes
但是这两个评估在定量解释更好的变体方面并不真正感兴趣。我是强化学习的新手,并试图了解是否有任何其他方法可以在同一问题上比较 RL 模型的不同变体。
我指的是 colab 链接https://colab.research.google.com/github/ageron/handson-ml2/blob/master/18_reinforcement_learning.ipynb#scrollTo=MR0z7tfo3k9C上的所有车杆示例变体的代码。
tensorflow - 使用 GPU 和 Keras 进行强化学习
我正在使用这段代码(请原谅它的混乱)在我的 CPU 上运行。我有一个我自己创建的自定义 RL 环境,我正在使用 DQN 代理。
但是当我在 GPU 上运行这段代码时,它并没有使用太多,实际上它比我的 CPU 慢。
这是 的输出nvidia-smi
。如您所见,我的进程正在 GPU 上运行,但速度比我预期的要慢得多。
谁能指出我可以做些什么来更改我的 GPU 功能代码?
PS:请注意,我有两个 GPU,并且我的进程都在它们上运行。即使我使用两个 GPU 中的任何一个,问题是我的 GPU 没有被使用并且速度比 GPU 相对慢,所以两个 GPU 不是问题
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 的方法:
但这似乎不是最理想的方式。
提前致谢!
python - 强化学习 DQN 环境结构
我想知道如何最好地将我的 DQN 代理对其环境所做的更改反馈给它自己。
我有一个电池模型,代理可以观察到 17 个步骤和 5 个特征的时间序列预测。然后它决定是充电还是放电。
我想将其当前的充电状态(空、半满、满等)包含在其观察空间中(即在我提供给它的 (17,5) 数据帧内的某个位置)。
我有几个选项,我可以将一整列设置为充电状态值,一整行,或者我可以展平整个数据框并将一个值设置为充电状态值。
这些是不明智的吗?将整个列设置为单个值对我来说似乎有点初级,但它真的会影响性能吗?由于我计划使用 conv 或 lstm 层(尽管当前模型只是密集层),因此我对将整个事物展平持谨慎态度。
tensorflow - 为什么我的 DQN 模型会做出明显错误的决定?
我试图在 python 中实现一个由 tensorflow 模型玩的简单的回合制蛇游戏:代理可以在板上移动(例如 40x40 单元格),在每个访问的单元格处留下痕迹。在每一轮中,智能体必须选择三个可能的动作之一(动作空间:左转、右转、什么都不做),然后朝当前方向移动。智能体的目标是尽可能长时间地生存,并且不与自己的轨迹、棋盘墙或其他玩家的轨迹发生碰撞。每次代理死亡时,它都会获得很大的负面奖励,因为它应该学会在未来不做同样的动作。
通过长时间的训练,我看到了显着的学习进步(生存时间增加),但我也做了一个我不明白的观察:
在某些情况下,模型做出明显错误的决定,即有几个选项,但它选择了立即导致死亡的动作。更糟糕的是,这个致命决定的 q 值(softmaxed)是 1.0(100%)!
目前模型看起来像:
输入层是棋盘的一部分(11 x 11),中间是代理加上代理方向(one-hot)。
当然,我尝试了一些模型变化(层大小、隐藏密集层的数量),但到目前为止还没有成功。
我的一般问题是这种错误学习行为的可能原因是什么?
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 文件)中提取权重来帮助我吗?或者有没有更好的方法来解决这个问题?
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
的时候曲线稳定(意味着几乎没有探索或随机移动)。
我尝试了不同的超参数,但结果没有任何明显差异,如果有人能给我指出问题所在的指针,我将不胜感激。
我主要使用的超参数是:
这是我的代码:
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.
r - 使用神经网络更新 R 中的 DQN
我正在尝试使用该neuralnet
包在 R 中实现一个简单的深度 Q 学习案例。
我有一个具有初始随机权重的初始网络。我用它为我的代理生成一些经验,结果,我得到了状态和目标。然后我将状态拟合到目标并获得一个具有新权重的新网络。
我如何结合新的权重和初始权重?我是否只是保留新权重并丢弃初始权重?
reinforcement-learning - openAI健身房的lunarlander连续超参数搜索
我正在尝试从开放的 AI 健身房解决 LunarLander 连续环境(解决 LunarLanderContinuous-v2 意味着在 100 次连续试验中获得 200 的平均奖励。)从该环境中连续 100 集可能获得最佳平均奖励。困难在于我提到的月球着陆器是不确定的。(解释:现实物理世界中的观察有时是嘈杂的)。具体来说,我在对着陆器位置的 PositionX 和 PositionY 观察中添加了一个均值 = 0 且标准值 = 0.05 的零均值高斯噪声。我还将 LunarLander 动作离散化为有限数量的动作,而不是环境启用的连续范围。
到目前为止,我正在使用 DQN、双 DQN 和决斗 DDQN。
我的超参数是:
- 伽玛,
- ε开始
- ε端
- ε衰变
- 学习率
- 动作数量(离散化)
- 目标更新
- 批量大小
- 优化器
- 集数
- 网络架构。
我很难达到好的甚至平庸的结果。有人对我应该为改善结果而进行的超参数更改有什么建议吗?谢谢!