Fastai在计算机视觉和表格学习方面的表现令人惊叹。有人希望RL的情况也一样。这个回购协议的目的是要有一个尽可能容易启动的框架,但也为测试新代理而设计。

fast-rl的Python项目详细描述


快速强化学习

本回购协议不隶属于杰里米·霍华德或他的课程,可在此处找到:此处 我们将使用fastai库中的组件来构建和训练我们的强化学习(rl) 代理. < /P>

请注意,下面是现有rl框架的详细介绍:

然而,Pythorch中也有一些框架,最引人注目的是Facebook的地平线:

我的动机是现有的框架通常使用tensorflow,这并不反对tensorflow,但是我有 使用Pythorch在较短时间内完成更多任务。

Fastai在计算机视觉和表格学习方面的表现令人惊叹。有人希望RL的情况也一样。 这个回购协议的目的是要有一个尽可能容易启动的框架,但也要为测试而设计 新代理。

目录

  1. 安装
  2. beta todo
  3. 代码
  4. 版本控制
  5. 贡献
  6. 样式
  7. < > >

    安装

    很快我就想添加一些脚本来安装一些复杂的依赖项。我们有两个步骤:

    1.a快速 安装fastai 或者如果你是水蟒(这是一个好主意,我会使用水蟒),你可以做:
    conda安装-c pytorch-c fastai fastai

    1.b可选/附加环境 开放所有健身房:
    PIP安装健身房[全部]

    迷宫:
    git克隆https://github.com/mattchantk/gym maze.git
    CD健身迷宫
    python setup.py安装

    2实际回购 git克隆https://github.com/josiahls/fast reinforcement learning.git
    CD快速强化学习 python setup.py安装

    βtodo

    目前这些是我个人迫切需要的东西,然后好的东西将使这个回购 有价值的东西。它们按我计划执行的顺序列出。

    关键

    • [X]mdpdatabunch:完成到有用的程度。请参考:测试/测试环境 示例:
    fromfast_rl.core.EnvsimportEnvsfromfast_rl.core.MarkovDecisionProcessimportMDPDataBunch# At present will try to load OpenAI, box2d, pybullet, atari, maze.# note "get_all_latest_envs" has a key inclusion and exclusion so if you don't have some of these envs installed, # you can avoid this here.forenvinEnvs.get_all_latest_envs():max_steps=50# Limit the number of per episode iterations for now.print(f'Testing {env}')mdp_databunch=MDPDataBunch.from_env(env,max_steps=max_steps,num_workers=0)ifmdp_databunchisNone:print(f'Env {env} is probably Mujoco... Add imports if you want and try on your own. Don\'t like 'f'proprietary engines like this. If you have any issues, feel free to make a PR!')else:epochs=1# N episodes to runforepochinrange(epochs):forstateinmdp_databunch.train_dl:# Instead of random action, you would have your agent heremdp_databunch.train_ds.actions=mdp_databunch.train_ds.get_random_action()forstateinmdp_databunch.valid_dl:# Instead of random action, you would have your agent here and have exploration to 0mdp_databunch.valid_ds.actions=mdp_databunch.valid_ds.get_random_action()
    • [X]DQN代理:参考测试/测试学习者/测试基本模型迷宫。这个测试是 有点像地狱的风景。你会注意到我计划使用学习者回调来实现一个fit函数。另外请注意,健身房迷宫环境 至少对于离散测试是很重要的,因为你可以用模型的奖励来加热迷宫。 完成了dqn agent的基本学习/优化。它无疑是不稳定的。请注意下一步。

    基本dqns最大的问题之一是q值经常移动。实际的基本dqn应该 成为一个固定目标DQN,但是让我们转移到一些调试工具,这样我们更有效。

    可测试代码:

    fromfast_rl.agents.DQNimportDQNfromfast_rl.core.LearnerimportAgentLearnerfromfast_rl.core.MarkovDecisionProcessimportMDPDataBunchdata=MDPDataBunch.from_env('maze-random-5x5-v0',render='human')model=DQN(data)learn=AgentLearner(data,model)epochs=450callbacks=learn.model.callbacks# type: Collection[LearnerCallback][c.on_train_begin(max_episodes=epochs)forcincallbacks]forepochinrange(epochs):[c.on_epoch_begin(episode=epoch)forcincallbacks]learn.model.train()forelementinlearn.data.train_dl:learn.data.train_ds.actions=learn.predict(element)[c.on_step_end(learn=learn)forcincallbacks][c.on_epoch_end()forcincallbacks][c.on_train_end()forcincallbacks]

    结果:

    <表><广告> src=< /广告><正文>图1:我们现在能够使用一些Fastai API培训代理

    我相信特工在第一集之后就爆炸了。别担心!我们会做一个RL翻译看看 继续!

    • [X]agentInterpretation:第一种方法是热映射 具有超级重要调试预期回报的环境。在上面的代码中,我们用迷宫测试 有充分的理由。与其他环境相比,迷宫热图奖励非常简单。

    用法示例:

    fromfast_rl.agents.DQNimportDQNfromfast_rl.core.InterpreterimportAgentInterpretationv1fromfast_rl.core.LearnerimportAgentLearnerfromfast_rl.core.MarkovDecisionProcessimportMDPDataBunchdata=MDPDataBunch.from_env('maze-random-5x5-v0',render='human')model=DQN(data)learn=AgentLearner(data,model)epochs=10callbacks=learn.model.callbacks# type: Collection[LearnerCallback][c.on_train_begin(max_episodes=epochs)forcincallbacks]forepochinrange(epochs):[c.on_epoch_begin(episode=epoch)forcincallbacks]learn.model.train()forelementinlearn.data.train_dl:learn.data.train_ds.actions=learn.predict(element)[c.on_step_end(learn=learn)forcincallbacks][c.on_epoch_end()forcincallbacks]# For now we are going to avoid executing callbacks here.learn.model.eval()forelementinlearn.data.valid_dl:learn.data.valid_ds.actions=learn.predict(element)ifepoch%1==0:interp=AgentInterpretationv1(learn)interp.plot_heatmapped_episode(epoch)[c.on_train_end()forcincallbacks]
    <表><广告> src=< /广告><正文>图2:在第0集期间按状态计算的累计奖励。 src=

    如果我们改变:

    interp=AgentInterpretationv1(learn)interp.plot_heatmapped_episode(epoch)

    至:

    interp=AgentInterpretationv1(learn)interp.plot_episode(epoch)

    我们可以为特定剧集制作以下情节:

    <表><广告> src=< /广告><正文>图4:代理在第0集期间估计的奖励。 src=

    由agentEnterpretation对象决定,我们需要调试或改进代理。 我们将在创建适合学习者的功能的同时进行此操作。

    • []学习者基础:在DQN和添加DDQN、固定目标、DDDQN之后,我们需要转换这个(最有可能)混乱的测试 变成一个合适的物体。与基础学习者相似。
    • []DDPG代理:我们需要至少有一个代理能够执行连续的环境执行。注意,我们 可以通过binning使离散代理能够在连续域中操作。
    • []学习者重构:DDPG可能会把一切都搞砸,哈哈。我们需要重新思考学习者/也许尝试 消除本机Fastai库方法的一些自定义方法。

    附加的

    • []像Fastai这样的单一全局拟合功能。更好的是,实际上只需使用它们的通用拟合功能。

    代码

    一些关键的收获是Fastai使用回调。回调不仅允许日志记录,实际上还可以添加 对泛型fit函数的回调可以彻底改变其行为。我的目标是建立一个简单的图书馆 尽可能在服务器或自己的计算机上运行。我也对这种易于扩展的方式感兴趣。

    我有几个假设,我认为代码/支持算法应该遵循:

    • 环境应该是可pickle和可序列化的。它们应该能够多次关闭和启动 在运行时。
    • 对于每个步骤,代理所需的信息不应超过环境的图像或状态值。这意味着 不应期望环境允许输出接触点、子目标或striPS式逻辑输出。

    理性:

    • 关闭/启动:某些环境(pybullet)存在关闭和启动不同环境的问题。 幸运的是,我有一个叉子弹头,所以这些修改将被强制执行。
    • pickling:能够将环境封装为.pkl对于保存它和所有信息非常重要 它产生了。
    • 可串行化:如果我们想进行并行处理,环境需要可串行化才能在 这些过程。

    一些额外的假设:

    • 环境可以更容易无目标,或者有一个单一的目标,其中openai定义为envgoalenv

    这些假设对于我们从其他回购中实现其他env是必要的。我们不想被束缚在 开放式健身房。

    版本控制

    目前回购正处于阿尔法阶段。我计划把这个从alpha版本移到伪beta/working版本。 无论版本如何,我们都将遵循python风格的版本控制

    alpha版本:...例如0.1.0.

    Git+工作流

    样式

    Fastai没有严格遵循从Guidos推荐中派生的谷歌Python风格指南", 不过,在本回购协议中,我们将使用本指南。
    但是,有些例外情况(通常在fastai中发现):

    • 在if语句的情况下,允许"pep 8每行多个语句",只要它们仍然是 在列限制内。

    欢迎加入QQ群-->: 979659372 Python中文网_新手群

    推荐PyPI第三方库


热门话题
java如何在用户输入的基础上使用applet绘制线条?在g为null的状态下发生的错误,如何修复   java频率源   java无法单击使用Selenium WebDriver创建的<div>下拉列表   java Wildfly 15在不同的机器上运行时不创建集群   Java:比较3个数字。得到他们中最伟大的   java与Maven/Hudson和TestNG一起使用多个类   java发生JNI错误(jdeveloper12c)   java在现实生活中同步多线程程序中的方法有什么意义   java Glassfish嵌入式JNDI模块范围查找   windows使用WMIC优雅地杀死Java进程   午夜(上午12点)java更新小部件失败   java无法解析方法“registerListener(com.xxx.xxx.MainActivity,安卓.hardware.SensorManager,int)”   java Hibernate版本属性在更改时调用自动更新?   java创建新线程是否会产生刷新缓存的副作用?   java saveAsTextFile性能改进   java如何自动化新的Facebook注册弹出窗口?   来自现有RDD的java Spark流媒体   AES256 OpenSSL C++和java加密:解密时的BADPADION异常