问题标签 [tensorflow-agents]

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 回答
97 浏览

python - tf-agent, QNetwork => DqnAgent w/ tfa.optimizers.CyclicalLearningRate

是否有一种简单的本地方法可以在 DqnAgent 上实现带有QNetwork的 tfa.optimizers.CyclicalLearningRate

尽量避免编写我自己的 DqnAgent。

我想更好的问题可能是,在 DqnAgent 上实现回调的正确方法是什么?

0 投票
0 回答
90 浏览

python - 具有实际环境而不是 python 类环境的 TensorFlow 代理

根据关于强化学习的维基百科

有两个元素使强化学习变得强大:使用样本来优化性能和使用函数逼近来处理大型环境。由于这两个关键组件,强化学习可以在以下情况下在大型环境中使用:

  • 环境模型是已知的,但分析解决方案不可用。
  • 仅给出环境的仿真模型(基于仿真的优化主题)。
  • 收集有关环境的信息的唯一方法是与之交互。

在我的情况下,环境属于第三种选择,唯一的方法是与之交互以获得经验。为此,我有一个烧瓶 restful API,环境调用 API 点以符合主要的 RL 框架功能重置和步骤。

由于它不是要传递给 TF Environment Wrapper 的 python 类,因此在我的解决方案中使用 TF 代理的其他方法是什么。也许是一个与消息总线通信以查看 API 是否被命中的环境类?

为了进一步解释,如果我根据TF Environment文档创建了一个 python 类,内部实现了 Step 和 Reset 来检查 API 是否被命中,这会是一个明智的解决方案吗?

更新1:我仍然无法弄清楚这一切,因为它有复杂的特殊从外部环境重置环境,但目前我正在研究一个代理类,作为python类和flask API之间的简单消息传递技术

0 投票
1 回答
151 浏览

tensorflow2.0 - Tensorflow 2.x Agents(TF-Agents, Reinforcement Learning Module) & PySC2

有pysc2( https://github.com/deepmind/pysc2 )&Tensorflow(1.x)和OpenAI-Baselines( https://github.com/openai/baselines ),如下

TF 团队最近提出了一个名为 TF-Agents ( https://github.com/tensorflow/agents ) 的 RL 实现(OpenAi-Baselines 的替代品)。例子 :

对于 TF-Agents,你可以

对于 pysc2,

如何将 TF-Agents 和 Pysc2 结合在一起?它们都是谷歌的产品。

0 投票
1 回答
535 浏览

python - TF-agents - 重播缓冲区将轨迹添加到批次形状不匹配

我发布了一个由另一个用户发布然后被删除的问题。我有同样的问题,我找到了答案。原来的问题:

我目前正在尝试按照本教程实施分类 DQN:https ://www.tensorflow.org/agents/tutorials/9_c51_tutorial

以下部分让我有点头疼:

对于上下文:agent.collect_data_spec具有以下形状:

这是一个示例 traj 的样子:

所以,一切都应该检查,对吧?环境输出一个形状为 [4, 84, 84] 的张量,与回放缓冲区所期望的相同。除了我收到以下错误:

这表明它实际上是在期待一个张量 shape [1, 4, 84, 84]。问题是,如果我让我的环境输出该形状的张量,然后我会收到另一条错误消息,告诉我输出形状与规范形状不匹配(duh)。如果我然后将规格形状调整为[1, 4, 84, 84],突然重播缓冲区期望形状为[1, 1, 4, 84, 84],依此类推......

最后,为了完成,这里分别有我的环境time_step_specaction_spec我的环境:

我已经尝试了今天的大部分时间,试图让张量正确拟合,但你不能重塑它,因为它是一个属性,所以在最后的努力中,我希望也许有一些陌生人可以告诉我哎呀,这里发生了。

先感谢您!

0 投票
1 回答
83 浏览

tensorflow - 可以用不可观察的外生状态定义 tf-agents 环境吗?

对于标题中的问题不是很清楚,我提前道歉。我正在尝试使用 tf-agents 训练强化学习策略,其中存在一些影响状态的不可观察的随机变量。

例如,考虑标准的 CartPole 问题,但我们在速度随时间变化的地方添加风。我不想训练一个依赖于每一步观察风速的代理;相反,我希望风影响杆的位置和角速度,并且代理学习适应,就像在无风环境中一样。然而,在这个例子中,我们需要当前时间的风速与前一时间的风速相关,例如我们不希望风速从时间 t 的 10m/s 变为 -10m/s时间 t+1。

我要解决的问题是如何跟踪外生变量的状态,而不使其成为训练代理时输入神经网络的观察规范的一部分。任何指导将不胜感激。

0 投票
1 回答
206 浏览

python - 在 tf-agents 中实现 q-rnn 的问题

我一直在尝试在 tensorflow 中使用 tf-agents 构建一个 rl 代理。我在自定义构建的环境中遇到了这个问题,但使用官方 tf colab 示例重现了它。每当我尝试使用 QRnnNetwork 作为 DqnAgent 的网络时,就会出现问题。该代理可以在常规 qnetwork 上正常工作,但在使用 qrnn 时会重新调整 policy_state_spec。我将如何解决这个问题?

这是 policy_state_spec 转换为的形状,但原始形状是 ()


我收到此错误:

0 投票
3 回答
520 浏览

python - Need full example of using tf-agents Ddpgagent

I cannot find any full examples of using the DdpgAgent from tf-agents in TensorFlow and have not been able to get it to work. Could someone please link a full piece of code or a complete tutorial creating and training a ddpg agent and a data_spec for it.

0 投票
0 回答
118 浏览

tensorflow - 在 TF Agents 训练期间没有任何变量的梯度

我正在玩强化学习并选择2048 游戏开始。我遵循了TF-Agents 包的指南,并从购物车杆环境和加强代理中复制了大部分代码。

在教程中,他们使用ActorDistributionNetworkTF Agents 附带的:

这似乎不适合我的需要,因为输入是 (16, 18) 张量,对 16 个网格站点上的 18 种可能状态进行热编码。输出是一个 (4) 张量,应该是有四个类别的 softmax。在这两者之间我只想有一些密集的层。

代理只是从教程中复制的:

我有一个训练循环,也是从教程中复制的:

有了给定actor_net的 ,训练效果很好,结果只是胡说八道。演员基本上有一个随机策略,因为动作输出是一个向量,有四个元素在 0.5 左右。显然最后没有softmax。

我试图用一个简单的 Keras 层堆栈替换网络,如下所示:

InnerReshape是因为在经验收集(或玩)期间,输入形状始终是 (B, 16, 18),而在训练期间它将是 (B, T, 16, 18),其中 B 是批量大小,T 是在一集中完成的时间步骤。一个简单的 KerasReshapeFlatten图层也会尝试使时间轴变平,由于游戏的开放性,时间轴具有不同数量的元素。

当我尝试训练这个时,我被告知没有为任何变量提供梯度:

完整的跟踪:

我的整个代码都在 GitHub 上,主要在environment.pyandtraining.py文件中。

我想这是一件小事。如何获得训练所需的梯度?

0 投票
1 回答
184 浏览

python - 如何修复 TF-Agents 中 policy_state 和 policy_state_spec 之间的 TypeError?

我正在开发一个使用 TF-Agents 播放(嗯,应该)Doom 的 PPO 代理。作为代理的输入,我试图给它一堆 4 张图像。我的完整代码在以下链接中: https ://colab.research.google.com/drive/1chrlrLVR_rwAeIZhL01LYkpXsusyFyq_?usp=sharing

不幸的是,我的代码无法编译。它在下面显示的行中返回一个 TypeError(它正在 Google Colaboratory 中运行)。

关于这个错误的事情是,对于我在 TF-Agents 文档中读到的内容,用户不应该对 policy_state 做任何事情,因为它是根据代理的网络自动生成的。

这是我发现的一个类似错误,但似乎并没有解决我的问题,尽管它在一个尝试过的解决方案中提示了我: py_environment 'time_step' doesn't match 'time_step_spec'

在阅读了上面的问题和答案后,我意识到我承诺了一个像这样的观察规范:

但我传递的是 4 个 np.arrays 的列表,其形状 = (160, 260, 3):

我这样做是因为我认为我的数据的“形状”不会改变,因为列表总是具有与观察规范的第一个维度相同数量的元素。列表更容易删除过去的帧并添加新的帧,如下所示:

我之前只尝试过 np.arrays,但无法删除过去的帧并添加新的帧。可能我做得不对,但我觉得 self._stacked_frames 与观察规范的形状相同,不能简单地删除或添加新数组。

这种方法在这里不起作用。就像我说的,可能我做错了。我看到了解决这种僵局的三种方法:

  1. 我将观察规范声明为四个帧的列表,每个帧都声明为 np.array(160, 260, 3);
  2. 我像我一样声明了观察规范,但是以正确的方式从 self._stacked_frames 中删除和添加帧(不确定是否可能,因为 self._stacked_frames 将被声明为 np.array(4, 160, 260, 3) 并且我'不确定它可以变成 np.array(3, 160, 260, 3) 或 np.array(5, 160, 260, 3),然后再变成 np.array(4, 160, 260, 3) ;
  3. 我仍然像我一样声明observation_spec,但我不删除或添加框架。我创建了一个循环,将第二帧(进入第二个插槽中的 stack_frames 函数)复制到第一个插槽,将第三帧复制到第二个插槽,将第四帧复制到第三个插槽,最后将新帧复制到第四个插槽。如下图:

考虑到我是对的,这最后一个似乎是解决我的问题的最确定的方法。我试过了,但 TypeError 仍然存在。我试过这样:

接着:

那么两个问题:

  1. 考虑到我对所提出的 TypeError 的看法是正确的,那么修复它的三种方法中哪一种最好?那么我尝试第三种可能性的解决方案的方式有什么问题吗?
  2. 考虑到我可能对 TypeError 不正确,那么这个错误是什么?
0 投票
1 回答
52 浏览

python - 合并和拆分来自 TF-agents 的时间和动作步骤

我正在尝试在一个简单的多代理非合作并行游戏中使用 TF 代理。为简化起见,我有两个用 TF 代理定义的代理。我定义了一个自定义的健身房环境,它将代理的组合动作作为输入并返回一个观察结果。代理的策略不应将全部观察作为输入,而应仅将其一部分作为输入。所以我需要做两件事:

  • 拆分time_step由 TF-agents 环境包装器返回的实例,以独立提供给代理的策略
  • 合并action_step来自代理策略的实例以提供环境。

如果agent1_policy并且agent2_policy是两个 TF-agents 策略并且environment是 TF-agents 环境,我希望能够这样做来收集步骤:

traj1然后traj2被添加到用于训练两个代理的缓冲区中。

我应该如何定义函数merge以及split在这个例子中?