问题标签 [stable-baselines]

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

python - 稳定的基线保存 PPO 模型并再次对其进行重新训练

您好,我正在使用稳定的基线包(https://stable-baselines.readthedocs.io/),特别是我正在使用 PPO2 并且我不确定如何正确保存我的模型......我训练了 6 个虚拟天和让我的平均回报达到 300 左右,然后我认为这对我来说还不够,所以我又训练了 6 天的模型。但是当我查看训练统计数据时,每集的第二次训练返回开始于 30 左右。这表明它没有保存所有参数。

这就是我保存使用包的方式:

0 投票
0 回答
510 浏览

python - CUDA 和张量流的问题

我在让我的 RL 程序开始工作时遇到问题。我首先安装了 stable-baselines 和 procgen。

pip install stable-baselines procgen

然后我安装了 tensorflow 和 tensorflow-gpu

pip install tensorflow==1.14.0 tensorflow-gpu==1.14.0

我安装了 CUDA 10.0,但我不断收到此错误

更新我的情况,我发现了更多说明,看起来它离工作更近了,但现在它向我展示了这一点

0 投票
0 回答
168 浏览

reinforcement-learning - 在 openai gym 和 stable-baselines 中为无效动作添加逻辑的问题

我想将我的环境集成到 openAI 健身房,然后使用稳定的基线库对其进行训练。

链接到稳定的基线:

https://stable-baselines.readthedocs.io/

稳定基线中的学习方法是单线学习,您无法访问在训练期间采取的操作。

更具体地说,您不会在代码中从环境中采样的那一行:

但是,我喜欢在我选择下一个状态的动作的地方添加一些逻辑,并拒绝一些逻辑不适用于它们的动作(例如棋盘非法移动),例如:

一种方法是为 action_space sample() 函数编写一个包装器,并且只选择合法的行为。就像class DiscreteWrapper(spaces.Discrete)以下链接中的一样:

https://github.com/rockingdingo/gym-gomoku/blob/master/gym_gomoku/envs/gomoku.py

但问题是稳定的基线只接受某些数据类型,也不允许这样做。

我怎样才能以一种可集成到稳定基线框架中并且不违反稳定基线标准的方式来做到这一点?如果这根本不可能,那么有没有人知道强化学习框架不同于稳定的基线允许访问动作?

0 投票
1 回答
706 浏览

python - OpenAI 基线中的 LazyFrames 如何节省内存?

OpenAI 的基线使用以下代码返回 aLazyFrames而不是串联的 numpy 数组以节省内存。这个想法是利用一个 numpy 数组可以同时保存在不同列表中的事实,因为列表只保存引用而不是对象本身。但是,在 的实现中LazyFrames,它进一步将串联的 numpy 数组保存在 中self._out,在这种情况下,如果每个LazyFrames对象都至少被调用一次,它将始终在其中保存一个串联的 numpy 数组,这似乎根本没有节省任何内存. 那么有什么意义LazeFrames呢?还是我误解了什么?

0 投票
1 回答
1071 浏览

python - 如何在 google colab 中创建实时 matplotlib.pyplot 图?

不幸的是,无法%matplotlib notebook像在我的 PC 上的离线 jupyter 笔记本中那样在 google colab 笔记本中创建实时绘图。

我发现了两个类似的问题,回答了如何为情节图(link_1link_2)实现这一点。但是我无法使其适应 matplotlib,或者根本不知道这是否可能。

我在这里遵循本教程中的代码:GitHub 链接。特别是我想运行这段代码,它会创建一个回调,在训练步骤上绘制每一步的奖励:

0 投票
1 回答
764 浏览

python-3.x - 具有张量流问题的稳定基线

它说:Stable-Baselines 支持从 1.8.0 到 1.15.0 的 Tensorflow 版本,并且不适用于 2.0.0 及更高版本的 Tensorflow。

所以我尝试安装“sudo pip3 install tensorflow==1.15.0”

但我收到消息:错误:找不到满足要求 tensorflow==1.15.0 的版本(来自版本:2.2.0rc1、2.2.0rc2、2.2.0rc3、2.2.0rc4、2.2.0)错误:否找到 tensorflow==1.15.0 的匹配分布

我正在使用:Ubuntu 20.04 LTS Python 3.8.2 pip 20.1.1 来自 .../python3.8/site-packages/pip (python 3.8)

如何安装适用于稳定基线的 tensorflow 版本?

0 投票
1 回答
74 浏览

python - 自定义 RL 环境的意外动作分布

我正在创建一个自定义环境并在上面训练一个 RL 代理。

我正在使用稳定基线,因为它似乎实现了所有最新的 RL 算法,并且似乎尽可能接近“即插即用”(我想专注于创建环境和奖励函数而不是实现细节模型本身)

我的环境有一个大小为 127 的动作空间,并将其解释为 one-hot 向量:将向量中最大值的索引作为输入值。为了调试,我创建了一个条形图,显示每个值被“调用”了多少次

在训练之前,我希望图表显示“事件”的大致均匀分布: 统一条形图

但相反,动作规范下端的“事件”比其他事件更有可能: 在此处输入图像描述

我创建了一个colab来解释和重现该问题

我在github 问题中问了这个问题,但他们建议我在这里发布问题

0 投票
3 回答
5009 浏览

python - 稳定的基线不适用于 tensorflow

所以我最近重新开始学习机器学习,并决定开始“ConnectX”的 Kaggle 课程(https://www.kaggle.com/learn/intro-to-game-ai-and-reinforcement-learning)。我正在尝试做第 4 课,其中我使用稳定基线 + TensorFlow 来制作 AI。问题是,我似乎无法正确使用稳定基线,因为当我尝试导入它时它会立即给我一个错误。这是错误消息:

看起来有问题scipy,但我不知道我能做些什么来解决它。即使我运行此错误也会发生import stable_baselines。这是我为创建虚拟环境而运行的代码(顺便说一句,这是在 PowerShell b/c 中,这是 Jupyter Lab 给我的):

注意:我不知道这是否有任何意义,但是当我安装时stable-baselines,会出现错误:ERROR: gym 0.17.2 has requirement cloudpickle<1.4.0,>=1.2.0, but you'll have cloudpickle 1.5.0 which is incompatible.

PS:我在这里发现了同样的问题,但我不知道他们是如何解决的。答案只是说“我用过 anaconda”,但 anaconda 中没有stable-baselines包!我尝试从 anaconda 安装 tensorflow 并从 pip 安装 stable-baselines,但它仍然给出了同样的错误。

最后编辑:看起来这个问题是关于.导入的,并且仅在jupyter notebook(与它没有任何关系tensorflow- 它在 Python CLI 中工作正常)有效。我已经在关于opencv 这里的新问题中解释了它。

〜阿尤什

0 投票
0 回答
64 浏览

stable-baselines - 为什么稳定基线评估助手需要环境?

稳定基线中的模型在创建时需要一个环境。例如

评估助手还需要指定环境。IE

如果模型中已经指定了评估助手中指定的环境,那么它的目的是什么?环境是模型创建和评估中的强制性参数。

谢谢

0 投票
0 回答
223 浏览

machine-learning - 对于优先体验重放的 DQN,终端状态的 TD 误差是多少?

在 Prioritized Experience Replay 中计算目标网络的 TD 误差时,我们从附录 B 中的论文方程 2) 中得到:

$$\delta_t := R_t + \gamma max_a Q(S_t, a) - Q(S_{t-1}, A_{t-1})$$

如果 $S_t$ 是终端状态,则适用相同的公式对我来说似乎没有必要/不正确。这是因为在更新动作网络时计算误差时,我们会特别注意终端状态,并且不会为 go term 添加奖励(例如上面的 $\gamma max_a Q(S_t, a)$)。例如,请参见此处:https ://jaromiru.com/2016/10/03/lets-make-a-dqn-implementation/ 。

我的问题是:

  1. 在计算优先体验重放的 TD 误差时是否应该单独处理终端状态?
  2. 为什么/为什么不?