问题标签 [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.
state - 深度 Q 学习的输入状态
我正在使用 DQN 进行资源分配,代理应将到达请求分配给最佳虚拟机。我正在修改 Cartpole 代码如下:
Cartpole 状态作为 Q 网络的输入是由环境给定的。
问题是在我的代码中 Q 网络的输入是什么?因为代理应该根据到达请求的大小采取最好的行动,但这不是由环境给出的。我应该通过这个输入值,大小来输入 Q 网络吗?
python - 如何在 Tensor Flow 中调整 tf-agents 和策略的超参数?
我已经设置了一个包装在张量流类中的 python 环境,以使其成为张量流环境。然后我按照此处列出的协作笔记本设置学习。目前,我正在使用 dqn 和 REINFORCE 代理。
该设置运行良好,结果与预期的一样。现在我想进入超参数的调整,比如衰减 epsilon greedy、权重等。
我需要一些关于如何使用有关如何访问这些超参数的文档的指示。
tensorflow - 我可以使用 DQN 和样本在不与环境交互的情况下训练代理吗?
我想使用 DQN 和样本来训练 RL 代理,而无需与环境交互。据我了解,DQN 是一种离策略算法,因此它似乎是可能的。(我说得对吗?)但是,到目前为止我还没有训练过。具体来说,每个状态的 argmax 的值是相同的。(在最优策略中应该是不同的。)
我的环境如下:
- 状态:4 个状态(
A
,B
,C
,D
) - 动作:3 个动作 (
Stay
,Up
,Down
) - Reward & Transition:
B
是终端状态。(括号中的表达式表示(状态、动作、奖励、下一个状态)。)- 当您
Stay
进入 时A
,您将进入A
并获得 0 (A
,Stay
, 0,A
) - 当您
Up
进入 时A
,您将进入B
并获得 0.33 (A
,Up
, 0.33,B
) - 当您
Down
进入 时A
,您将进入A
并获得 0 (A
,Down
, 0,A
) - 当您
Stay
进入 时B
,您将进入B
并获得 0.33 (B
,Stay
, 0.33,B
) - 当您
Up
进入 时B
,您将进入C
并获得 0.25 (B
,Up
, 0.25,C
) - 当您
Down
进入 时B
,您将进入A
并获得 0 (B
,Down
, 0,A
) - 当您
Stay
进入 时C
,您将进入C
并获得 0.25 (C
,Stay
, 0.25,C
) - 当您
Up
进入 时C
,您将进入D
并获得 0.2 (C
,Up
, 0.2,D
) - 当您
Down
进入 时C
,您将进入B
并获得 0.33 (C
,Down
, 0.33,B
) - 当您
Stay
进入 时D
,您将进入D
并获得 0.2 (D
,Stay
, 0.2,D
) - 当您
Up
进入 时D
,您将进入D
并获得 0.2 (D
,Up
, 0.2,D
) - 当您
Down
进入 时D
,您将进入C
并获得 0.25 (D
,Down
, 0.25,C
)
- 当您
我的训练方式:
- 我将上面的每个样本都放在缓冲存储器中。
- 然后我使用 DQN 进行训练。(不与环境交互)
杂项。
- 神经网络
- 两层(输入和输出层。它们之间没有隐藏层)
- 优化器:亚当
- 超参数
- 学习率:0.001
- 批量大小:在 2 到 12 之间变化
代码截图
结果
- 结果截图
- 列是动作。(0:
Stay
, 1:Up
, 2:Down
) - 行是状态。(有些是不同的,有些是相同的)。
- 每个状态的 argmax 为 1,这不是最优策略。
- 即使我更多地运行循环,结果也不会改变。
reinforcement-learning - 稳定的基线:DQN 表现不佳?
我在使用 DQN 作为对角线和正弦波作为价格波动时遇到问题。当价格上涨时,会有奖励,并且在图表中显示为绿色。当价格下跌并被标记为红色时,奖励就会增加。请看这个链接这个链接的DQN在学习上比稳定基线的DQN好很多。
即使对 DQN 使用对角线,我也遇到了困难。
辛波:如果结果相反,那就太好了。绿色代表上升,红色代表下降。
我所做的是将学习率从 0.01 更改为 10。将 Epsilon 更改为 1。
在 PPO2 中,我可以得到一个不错的结果。对于罪波:
对于对角线,它也确实有效!
这是我的代码。只需评论和取消评论测试 PPO2 与 DQN 所需的内容
系统信息: 描述您的环境特征:
- 视窗 10
- 张量流 1.15.0
- 稳定基线 2.10.2a0 dev_0
- 健身房-anytrading 1.2.0
康达清单:
pytorch - Pytorch DQN, DDQN using .detach() 造成了非常大的损失(呈指数增长)并且根本不学习
这是我对 CartPole-v0 的 DQN 和 DDQN 的实现,我认为这是正确的。
我用以下来评估和训练我的 DQN 和 DDQN。
问题是我的 DQN 网络没有训练,并且在损失计算中使用 target.detach() 损失呈指数增长。如果我不使用 .detach(),DQN 对象会训练,但我相信这不是正确的方法。对于 DDQN,我的网络总是不训练。任何人都可以就可能出错的地方提供一些建议吗?
tensorflow - 使用 TensorBoard 从 tf_agents 可视化图形
我对 RL 很陌生,目前正在自学如何使用 tf_agents 库实现不同的算法和超参数。
我一直在玩本教程https://colab.research.google.com/github/tensorflow/agents/blob/master/docs/tutorials/1_dqn_tutorial.ipynb提供的代码。
在学习了如何使用 TensorBoard 之后,我开始想知道如何从 tf_agents 库中可视化图表。每个 TensorBoard 教程/帖子似乎都实现了自己的模型或定义 tf.function 来记录图。但是,我不能将这些方法应用到上面的教程中。
如果有人可以帮助我在 TensorBoard 中使用 tf_agents 可视化模型图,将不胜感激。谢谢!
python - 在 Keras 模型中为 model.predict() 输入正确的问题
我有一个 DQN 代理,它接收由一个表示其位置的数值和一个表示来自多个用户的请求的二维数组组成的状态。
我对构建神经网络的尝试如此处所述。
现在的问题在于 model.predict() 方法,它是这样写的:
在方法中:
状态可以是 (agentPosition, [[1, 0, 0], [0, 0, 0], [0, 1, 0], ...])
例如,如果我有 11 个用户(等于 2D 请求数组中的行数),则状态的形状为 (2, (11, 3))。
错误说:
相反,如果我这样写:
然后错误是不同的:
编辑:我按照接受的解决方案中的指示做了,我收到了这个错误:
是这样的state[1]
元组 ((1, 0, 0), (0, 1, 0), ...)
的形状np.array(state[0])
是()。的形状np.array(state[1])
是 (11, 3)。
如果我写:
它给出了一个错误:
python - 用于非图像矩阵的 Keras CNN
我最近开始学习深度学习和强化学习,我试图弄清楚如何使用 Keras 为 10 行和 3 列的 0 和 1 矩阵编写卷积神经网络。
例如,输入矩阵看起来像这样
输出应该是另一个由 0 和 1 组成的矩阵,与上述输入矩阵不同,并且具有不同的行数和列数。
输出矩阵中 0 和 1 的位置取决于输入矩阵中 0 和 1 的位置。
还有第二个输出,一个数组,其中的值取决于输入矩阵中 1 的位置。
我在互联网上搜索了代码示例,但找不到任何有用的东西。
编辑:
神经网络的输入是一个 10 行的二维数组,每行 3 列。输出(至少现在)是一个 2D 数组,有 12 行,每行有 10 列(与输入 2D 数组中的行数相同)。
这是我到目前为止想出的,我不知道它是否正确。
以下是模型摘要:
python - TF_Agent,observation_spec 和 action_spec 为 2D 矩阵
我正在尝试将tf_agent 库与自定义环境一起使用来构建执行以下操作的代理:
代理通过向他们提供资源(12 个资源)来为许多用户(10 个用户)提供服务。
它接收一个输入(观察/状态),它是一个 0 和 1 的二维矩阵;假设它有 10 行(用户数)和 3 列。如果某一行的某一列的值为 1,则意味着必须为该行的用户分配资源。
观察(状态)矩阵示例:
这意味着(例如)该用户
row[1]
需要资源。(用户 1)输出也是一个 0 和 1 的二维矩阵,有 12 行(资源数)和 10 列(用户数)。
如果资源 0 分配给用户 1,则输出矩阵中的第一行将具有值为 1 的第二列。
row[0][1]
每个资源一次只能分配给一个用户,每个用户一次只能分配一个资源。(这意味着每一行只有一个值为 1 的列,并且整个矩阵中的每一列只能有一个值为一个的行 | 示例:例如,不能有第一行的第一列和第一列第二行的列的值都为 1,其中一个必须为 1,其他必须全部为 0)。
动作矩阵示例:
在上面的例子中,第一行第二列有1
row[0][1]
(row[1]
已要求分配资源。如果用户没有请求资源,则不应向该用户提供任何资源。
我不知道如何为此自定义环境初始化 tf_agent 的 observation_spec 和 action_spec。
而且我不确定 tf_agent 是否是最好的方法。
我是深度学习的新手,从头开始为这个自定义环境构建神经网络非常令人困惑。
tensorflow - 具有向量输入和向量输出的 DQN 代理
我是强化学习和深度学习的初学者,我想为 DQN 代理(在 Keras 中)构建一个神经网络,它接收一个长度等于 3 的向量作为输入,并输出另一个长度等于 10 的向量。
输入向量有一个元素等于 1,其他元素等于 0。它也可以全为零,但不能有多个值为 1 的元素。
例子:
或者:
输出必须是一个包含 10 个元素的向量,其中一个元素等于 1,所有其他元素的值都等于 0。就像输入向量一样,它也可以全为零,但不能超过一个值为 1 的元素。
例子:
或者:
如果输入向量中包含“1”,则输出向量必须最多有一列值为 1。
如果输入向量全为零,则输出向量必须将所有值设置为 0。
我试图创建一个卷积神经网络,但我遇到的示例将图像(因此是 2D 矩阵)视为输入,并将一个值作为输出而不是向量。