微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们需要健身房环境的“元数据”字段做什么? env_test 脚本video_recorder 脚本另一个可能的用例结论

如何解决我们需要健身房环境的“元数据”字段做什么? env_test 脚本video_recorder 脚本另一个可能的用例结论

我注意到,基类Env(来自健身房)包含一个名为metadata的类字段。该字段似乎用于指定如何呈现环境。例如,对于FrozenLake环境,metadata被定义为

Metadata = {'render.modes': ['human','ansi']}

但是,该属性/字段Metadata从未在该文件中使用。例如,在同一示例中,render method一个参数,您可以在其中指定渲染模式(render方法甚至不检查传递给该参数的值是否在{{1 }}类字段),所以我不确定为什么需要这个Metadata字段。

那么,为什么我们需要字段Metadata?它是否用于指定环境的呈现“模式”以外的其他用途?如果是,在哪里?

解决方法

我会尽量保持基础。 我进行了一些试验,据我所知,渲染器有两种模式,humanansi处理控制台上的输出。(随附的是控制台的屏幕截图)。在人工模式(默认设置)下,输出将为SFFF,FHFH,带有当前观察的颜色标签(对人类友好)...等,在ansi模式下,您将输出 bytes-like 不执行编码,解码或换行翻译的对象,例如\ nSFFF \ n \ x1b [41mF \ x1b [0mHFH]。

在下面查看我的输出: enter image description here

,

首先,我不是 OpenAir 健身房存储库的维护者/贡献者。因此,下面的所有内容都来自我自己的调查,因为我想知道同样的事情。因此,OpenAi Gym 团队有其他原因包含元数据属性,而不是我在下面写的那些。

TLDR

metadata 属性描述了一些关于健身房环境类的额外信息,这些信息在训练期间不需要,但在执行时很有用:

  • Python 测试。
  • 使用健身房工具。
  • 并行训练实用程序。

更深入的回答

首先要注意的是(在大多数环境中)metadata 属性是在类构造函数之前定义的。这意味着它是一个在类的所有实例之间共享的 class attribute。这样做是因为它不打算在训练期间使用,而是存储有关环境类的一些附加信息,可用于其他测试或健身房实用程序(这就是它被称为 META 数据的原因)。

我认为可以通过深入了解代码库并检查元数据的使用位置来了解这一点。在搜索代码时,我们可以看到 the frozen lake environment metadata 用在了两个地方:

env_test 脚本

此处在 gym/envs/tests/test_env.py 脚本中使用 render.modes 元数据来测试给定环境中所有可能的渲染方法是否按预期工作:

for mode in env.metadata.get('render.modes',[]):
    env.render(mode=mode)

video_recorder 脚本

第二个使用 render.modes 元数据的地方是 gym/wrappers/monitoring/video_recorder.py。这里用来检查gym环境是否有渲染模式,可以用录像机录制。

if 'rgb_array' not in modes:
            if 'ansi' in modes:
                self.ansi_mode = True
            else:
                logger.info('Disabling video recorder because {} neither supports video mode "rgb_array" nor "ansi".'.format(env))
                # Whoops,turns out we shouldn't be enabled after all
                self.enabled = False
                return

此处使用的另一个元数据示例是 video.frames_per_second 元数据。

另一个可能的用例

如上所述,在大多数环境中,元数据被定义为类属性。通过这样做,我们可以确保如果在其中一个实例上更改了属性,则所有其他实例也会知道此更改。例如,当您想同时使用 MPImultiple parallel gym environments 上训练代理时,这会很方便。例如,您可以一次更新所有实例的频率。

结论

从上面的调查来看,我认为元数据存储了关于健身房环境类的额外信息,在训练期间不使用,但例如可以在以下期间使用:

  • Python 测试。
  • 其他健身房实用程序。
  • 并行训练实用程序。

当然,您也可以将相同的信息作为单独的属性存储在实例上,但我认为由于在训练期间不使用,将其存储为 metadata 类属性更正确。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。