tf_agents 自定义 time_step_spec

2023-12-03

我正在修改 tf-agents,但在定制时遇到问题time_step_spec.

我正在尝试在健身房“Breakout-v0”中训练 tf-agent,我已经制作了一个函数来预处理观察结果(游戏像素),现在我想修改 time_step 和 time_step_spec 以反映新数据。

原来的time_step_spec.observation() is:

BoundedTensorSpec(shape=(210, 160, 3), dtype=tf.uint8, name='observation', minimum=array(0, dtype=uint8), maximum=array(255, dtype=uint8))  

我的是:

BoundedTensorSpec(shape=(1, 165, 150), dtype=tf.float32, name='observation', minimum=array(0., dtype=float32), maximum=array(1., dtype=float32))        

我成功创建了一个自定义 BoundedTensorSpec 并使用该函数修改 time_step

processed_timestep = timestep._replace(observation=processed_obs)

现在我无法理解如何修改 time_step_spec 我不完全理解它是什么,也不完全理解如何修改它的组件。

原始 time_step_spec 是:

TimeStep(step_type=TensorSpec(shape=(), dtype=tf.int32, name='step_type'), reward=TensorSpec(shape=(), dtype=tf.float32, name='reward'), discount=BoundedTensorSpec(shape=(), dtype=tf.float32, name='discount', minimum=array(0., dtype=float32), maximum=array(1., dtype=float32)), observation=BoundedTensorSpec(shape=(210, 160, 3), dtype=tf.uint8, name='observation', minimum=array(0, dtype=uint8), maximum=array(255, dtype=uint8)))

它到底是什么结构?张量数组?
我如何访问它的组件?
我可以使用多个组件制作自定义 time_step_spec 吗? (奖励、观察等)
我可以只修改单个组件吗?


通过使用环境可以轻松解决这个问题。在 TF-Agents 中,环境需要遵循PyEnvironment类(然后你用一个TFPyEnvironment用于并行执行多个环境)。如果您已经定义了环境以匹配此类的规范,那么您的环境应该已经为您提供了两种方法env.time_step_spec() and env.action_spec()。只需将这两个信息提供给您的代理即可完成。

要创建具有多个组件的 time_step,您可以查看以下示例:

self._observation_spec = {'observations': array_spec.ArraySpec(shape=(100,), dtype=np.float64),
                          'legal_moves': array_spec.ArraySpec(shape=(self.num_moves(),), dtype=np.bool_),
                          'other_output1': array_spec.ArraySpec(shape=(10,), dtype=np.int64),
                          'other_output2': array_spec.ArraySpec(shape=(2, 5, 2), dtype=np.int64)}

这条线进入环境的__init__功能。你不需要知道这实际上在做什么,但你可以看到它从根本上来说是一个带有字符串键的字典,ArraySpec价值观。请注意,如果您这样做,您将必须定义一个observation_and_action_constraint_splitter传递给代理,代理丢弃所有不应输入代理输入的组件。下面是一个示例,说明如何使用您的观察字典构建适当的时间步长env._step method:

observations_and_legal_moves = {'observations': current_agent_obs,
                                'legal_moves': np.ones(shape=(self.num_moves(), dtype=np.bool_),
                                'other_output1': np.ones(shape=(10, dtype=np.int64,
                                'other_output2': np.ones(shape=(2, 5, 2), dtype=np.int64}

ts.transition(observations_and_legal_moves, reward, self.gamma)

如果您的环境已经构建了 Tensor 输出,并且您只是无法弄清楚适当的 TensorSpec 应该是什么(获取它可能非常繁琐),那么您可以简单地调用tf.TensorSpec.from_tensor(tensor)弄清楚你必须定义什么。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tf_agents 自定义 time_step_spec 的相关文章

随机推荐

  • Kindle Fire 自定义软键菜单

    有谁知道如何从软键菜单中删除或隐藏菜单和搜索按钮 我想完成 Pulse 应用程序 隐藏搜索按钮 或 Kindle Fire 帮助和反馈应用程序 隐藏搜索按钮和菜单按钮 中正在执行的操作 我很好奇他们是否真的修改了软键菜单 或者使应用程序全屏
  • 如何在路径中编写带有变量的vba

    这是我在这个网站上发表的第二篇文章 我对 VBA 还比较陌生 我今天的问题是 如何将单元格值添加到路径字符串以指定我想要保存工作簿的文件夹 Dim Path As String Dim FileName1 As String Dim Fil
  • Eclipse 插件中标记的悬停文本

    我有一个带有问题标记的自定义编辑器 标记在 问题 视图中正确显示 包含图标 位置和文本 并且问题图标在编辑器的左边距中正确显示 我希望将鼠标悬停在边距中的问题标记图标上时在弹出窗口中显示相同的错误消息文本 就像在 Java 编辑器中一样 现
  • LINQ查询问题

    无法在 Feed 中获得任何结果 feedXML 具有正确的数据 XDocument feedXML XDocument Load http search twitter com search atom q twitter var feed
  • 使用 .addOnSuccessListener 返回私有方法的值

    再会 有什么方法可以实现这个吗 val db Firebase firestore val userID Firebase auth currentUser uid val infoRef db collection user docume
  • 如何在 Mongo 中查询“is not null”?

    我想执行以下查询 db mycollection find HAS IMAGE URL 正确的语法应该是什么 这将返回带有名为 IMAGE URL 键的所有文档 但它们可能仍然具有空值 db mycollection find IMAGE
  • BlueZ 兼容内核版本

    我在 Linux 中使用内核版本 3 0 35 和 bluez 4 98 这样我就可以按照 SO 问题之一中给出的 hcitool 命令来宣传 ibeacon 我还能够连接到其他 ble 设备 但无法使用 gatttool 中的 主要 列出
  • 在javascript中将数字转换为日期格式yyyymmdd到mm/dd/yyyy

    我正在获取 XML 提要并使用 JavaScript 将其写入 HTML 日期字段有 20120319 我想做的是将其转换为更易读的格式 例如 03 19 2012 在 JavaScript 中是否有一种简单的方法可以做到这一点 一种方法是
  • Spark:将 2 元组键 RDD 与单键 RDD 连接的最佳策略是什么?

    我有两个想要加入的 RDD 它们看起来像这样 val rdd1 RDD T U val rdd2 RDD T W V 碰巧的是 关键值rdd1是唯一的 并且元组键值rdd2是独一无二的 我想加入这两个数据集 以便得到以下 rdd val r
  • adb 无法将 .apk 文件复制到 Android 模拟器:没有这样的文件或目录

    我在让 MyFirstApp Hello World Android 应用程序在模拟器中运行时遇到了障碍 我正在按照以下网址的说明进行操作 http developer android com training basics firstap
  • 从 XSL 调用 Java (SAXON)

    我正在尝试使用 java 中的 Saxon 处理器 我正在使用saxon9ee jar里面 saxonee9 3 0 11j zip 刚刚下载 没有许可证 是否需要它才能工作 Their 可以在这里找到资源 http www saxonic
  • Swift - 圆角半径和投影问题

    我正在尝试创建一个按钮圆角 and a 阴影 无论我如何切换 该按钮都无法正确显示 我试过了masksToBounds false and masksToBounds true 但是要么圆角半径起作用而阴影不起作用 要么阴影起作用而圆角半径
  • @ManagedBean @Component 类中的 @Autowired 服务在 JSF 请求期间为 null [重复]

    这个问题在这里已经有答案了 我尝试过将 Spring 3 MVC 与 JSF 2 结合起来 我在 Spring 和 JSF 方面有一些经验 但之前从未尝试过加入它们 最后我有2个文件 ManagedBean name userBean Sc
  • CUDA C++11,lambda 数组,按索引的函数,不起作用

    我在尝试让 CUDA 程序按索引管理 lambda 数组时遇到问题 重现问题的示例代码 include
  • responseText 有效,但 responseXML 始终为 null

    我已经浏览了这里可以找到的所有答案 但无法解决这个问题 我很确定我没有错过任何明显的事情 我正在尝试加载基于经纬度的地图标记 问题是 当我尝试返回 AJAX 响应时 responseXML 始终为 null 如果我使用responseTex
  • 如何使用 Facebook GRAPH API 删除 Facebook 评论帖子?

    我开始研究这个是因为我希望能够删除 Facebook 活动墙上的评论 因为 删除帖子 似乎不适用于活动墙上的评论 然而 由于我不知道是否有可能 我决定看看是否可以手动删除我在自己的墙上发布的帖子 因为这是可能的 注意我是NOT使用任何 SD
  • Intent.getExtras() 总是返回 null

    我正在尝试通过通知和事件运行活动onCreate我想 重定向 为此添加对信息的思考Intent班级 一个重要的特性是生成通知的类是通过服务执行的 我从中检索上下文getApplicationContext类提供的方法android app
  • 在文件名前批量添加字符串

    我正在处理 Windows 批处理文件 需要更改当前目录中的文件名 我有这些文件 file1 txt file2 txt file3 txt 我需要在每个文件名之前添加字符串 REG 如下所示 REG file1 txt REG file2
  • VBA控制功能区?

    我正在为 Excel 2010 创建 VBA 加载项 我使用了 Microsoft Office 的自定义 UI 编辑器 创建我自己的功能区的工具 但是 我想为用户提供加载我的加载项的选项 而不显示功能区 或者显示功能区的不同部分 通过菜单
  • tf_agents 自定义 time_step_spec

    我正在修改 tf agents 但在定制时遇到问题time step spec 我正在尝试在健身房 Breakout v0 中训练 tf agent 我已经制作了一个函数来预处理观察结果 游戏像素 现在我想修改 time step 和 ti