问题标签 [keras-rl]

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 投票
0 回答
1169 浏览

openai-gym - openai健身房自定义环境action_space和observation_space howto

我正在尝试实施自定义 openai 健身房环境。动作空间和观察空间都包含值列表和离散空间的组合。我是否正确建模?例如:

其中 self.actions 是可能动作的值列表,对于每个可能没有额外的离散动作,范围为 100。观察空间与值列表和离散值的组合相同。这是建模的正确方法吗?另外,我使用 keras-rl 来运行代理,它需要:

如何为元组空间实现 n 和 shape?我试过:nb_actions = len(env.action_space.spaces) 这和n一样吗?如何替换 env.observation_space.shape?

0 投票
0 回答
575 浏览

python - 在对 epsilon 使用线性退火的 epsilon 贪心策略时测量情节奖励

Keras 中是否有标准做法或工具可以估计在训练期间与 epsilon 去相关的情节奖励?

在训练下面的 dqn 网络时,我可以在训练期间随着时间的推移测量情节奖励,但是由于问题的性质,随着 epsilon 的减少,无论模型是否从训练中得到改进,情节奖励都会增加。因此,很难判断模型是否正在改进/收敛,或者增加的情节奖励是否仅仅是由于 epsilon 的线性退火。

如果我必须手动解决这个问题,我将训练所需训练步骤的一小部分,然后使用 epsilon = 0 测试模型,记录该时刻的平均剧集奖励,手动更改 epsilon,然后再次执行相同的循环. 不过,这似乎是一个 hack,我认为其他任何使用 epsilon 线性退火的人都会遇到同样的问题。

想法?

我的模型构造如下:

典型的训练图可能如下所示: 典型的训练指标

0 投票
2 回答
212 浏览

python - 在哪里可以找到已实施的 DQfDAgent?

我正在尝试将该对象用作This BlogHis Code中使用的对象,但是当我这样做时,from rl.agents.dqn import DQfDAgent它会返回 me 和 error ImportError: cannot import name 'DQfDAgent'

我做了一个dir(rl.agents.dqn)并且没有DQfDAgent对象所以,博客的人是怎么做到的?

(更新 1)

我已经这样做了:

但它返回此错误:

0 投票
1 回答
502 浏览

python - keras-rl 的处理器类改变形状

好吧,我试图将 10 个整数的列表作为输入提供给 的模型keras-rl,但是,由于我使用的是新环境,OpenAI-Gym因此我需要根据需要设置处理器类。我的处理器类如下所示:

我的代理和模型是这样的:

但是当你尝试执行这个时,我可以看到输出是这样的:

如您所见,我得到的形状是批处理之一,我不知道如何解决它。以防万一您想做一些试验,我使用的环境是RecoGym(版本 1)。

0 投票
0 回答
589 浏览

python - DQNAgent 不能将批量大小超过 1

当我尝试训练一个 batch_size 大于 1 的代理时,它给了我一个例外。我的问题在哪里?

我直接从 keras-rl 的代码打印一些值,它给了我这个输出:

但也有这个例外:

我可以把处理器类的代码放上来,我认为这就是关键,但首先我要确保这里没有任何问题。

0 投票
0 回答
148 浏览

python - Keras 随机模型

有没有办法获得一个随机选择一个类的类Model的对象。keras每次都是真正随机的,不仅用网络的初始化权重阻塞训练和评估。

我需要将 a 传递Model给图书馆keras-rl以制作随机代理,以测试我是否在改进。

我的模型定义是:

但这给了我这个例外:

0 投票
0 回答
30 浏览

tensorflow - 我可以在只使用 keras 的环境中使用 tf.session() 吗?

感谢您阅读我的问题。

我正在使用 keras 开发基于 keres-rl 的强化学习代理。但我想升级我的代理,以便从开放 AI 基线代码中获得一些更新,以便更好地进行动作探索。但是代码只使用了 tensorflow。这是我第一次使用 tensorflow。我感到很困惑。我使用其“模型 API”构建 keras 深度学习模型。我从不关心模型的内部。但是我引用的代码充满了在深度学习模型内部启动并对其权重进行一些更改并使用 tf.Session() 获得即时层输出的代码。这个框架非常灵活。如下所示,使用 tf.Session() 可识别张量且不可调用的张量可以获得馈送 feed_dict 数据的结果。据我所知,在 keras 中,这是不可能的。

一旦我允许使用 tf.Session(),我的架构就会很复杂,没有人愿意理解和使用它,除非我可以更轻松地调整参考代码。

另一方面,如果我不允许这样做,我需要分解我现有的模型并使用大量的 K.function 来获得中间层的输出或者我无法从 keras 模型中获得的东西。

0 投票
1 回答
469 浏览

python - keras rl - dqn 模型更新

我正在阅读keras-rl /rl/agents/dqn.py中的 DQN 实现,并看到在该compile()步骤中基本上实例化了 3 个 keras 模型:

  • self.model:提供q值预测
  • self.trainable_model:与我们想要训练的损失函数相同self.model但具有我们想要训练的损失函数
  • self.target_model: 提供 q 个目标的目标模型,每k一步都使用来自的权重进行更新self.model

然而,唯一train_on_batch()被调用的模型是trainable_model- 这是我不明白的 - 这也更新了 的权重model

trainable_model在输出张量之一的定义中,y_pred引用来自 的输出model

trainable_model.train_on_batch()被调用时,重都trainable_modelmodel变化。我很惊讶,因为即使两个模型引用了相同的输出张量对象(trainable_model.y_pred = model.output),实例化也trainable_model = Model(...) 应该实例化一组新的权重,不是吗?

谢谢您的帮助!

0 投票
2 回答
477 浏览

machine-learning - 深度强化学习训练精度

我正在使用深度强化学习方法来预测时间序列行为。我是一个新手,所以我的问题比计算机编程问题更具概念性。我的同事给了我下面的图表,其中包含使用深度强化学习对时间序列数据分类的训练、验证和测试准确性。

在此处输入图像描述

从这张图中,可以看出验证和测试的准确率都是随机的,所以,当然,代理是过拟合的。

但更让我吃惊的(可能是因为缺乏知识,这也是我在这里问你的原因),是我的同事是如何训练他的经纪人的。在这张图表的 X 轴上,您可以找到“纪元”数(或迭代次数)。换句话说,智能体被多次拟合(或训练),如下面的代码所示:

根据图表和代码,令我感到奇怪的是,代理被拟合了几次,彼此独立,但训练准确度随着时间的推移而增加。似乎以前的经验正在帮助代理提高训练准确性。但是,如果环境被重置并且代理再次安装,这怎么可能呢?是否存在来自先前拟合的误差的反向传播,这有助于代理在下一次拟合中提高其准确性?

0 投票
1 回答
591 浏览

machine-learning - 深度强化学习 (keras-rl) 提前停止

根据这些家伙 ( https://nihit.github.io/resources/spaceinvaders.pdf ) 的说法,可以使用深度强化学习执行 Early Stopping。我之前在 Keras 上使用过深度学习,但是,如何在 keras-rl 上做到这一点?在同一个 fit() 函数中还是在将模型发送给代理之前?