注意
转到末尾 以下载完整示例代码。
开始使用日志记录¶
作者: Vincent Moens
注意
如需在笔记本中运行本教程,请在开头添加一个安装单元,内容为:
!pip install tensordict !pip install torchrl
在我们将所有内容整合到训练脚本中之前,本系列的最后一篇将介绍日志记录(logging)。
日志记录器¶
记录对于向外界报告你的结果以及检查你的算法是否正常学习至关重要。TorchRL 有几种日志记录器,可以与自定义后端(如 wandb (WandbLogger)、tensorboard (TensorBoardLogger) 或轻量级且便携的 CSV 日志记录器 (CSVLogger))进行交互,你几乎可以在任何地方使用这些日志记录器。
日志记录器位于 torchrl.record 模块中,各类日志记录器可在 API 参考文档 中找到。
在底层后端存在差异的前提下,我们力求使各类日志记录器(logger)的 API 尽可能保持一致。虽然日志记录器的执行过程大多可以互换使用,但它们的实例化方式可能有所不同。
通常,构建一个日志记录器至少需要指定实验名称,还可能需要指定日志目录及其他超参数。
from torchrl.record import CSVLogger
logger = CSVLogger(exp_name="my_exp")
一旦日志记录器实例化,唯一需要做的就是调用日志记录方法!例如,log_scalar()
在多个训练示例中用于记录诸如奖励、损失值或执行一段代码所花费的时间等值。
logger.log_scalar("my_scalar", 0.4)
录制视频¶
最后,录制模拟器的视频可能非常有用。某些环境(例如 Atari 游戏)本身已渲染为图像,而其他环境则需要你手动将其渲染为图像。幸运的是,在大多数常见情况下,渲染和录制视频并不太困难。
让我们首先看看如何创建一个输出图像的Gym环境
以及其观察结果。GymEnv 接受两个关键字
为此目的:
- from_pixels=True 将使 env step 函数
写入包含与您的
观察结果相对应的图像的 "pixels" 条目,和
pixels_only=False将表示您希望
观察结果也将被返回。
from torchrl.envs import GymEnv
env = GymEnv("CartPole-v1", from_pixels=True, pixels_only=False)
print(env.rollout(max_steps=3))
from torchrl.envs import TransformedEnv
TensorDict(
fields={
action: Tensor(shape=torch.Size([3, 2]), device=cpu, dtype=torch.int64, is_shared=False),
done: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False),
next: TensorDict(
fields={
done: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False),
observation: Tensor(shape=torch.Size([3, 4]), device=cpu, dtype=torch.float32, is_shared=False),
pixels: Tensor(shape=torch.Size([3, 400, 600, 3]), device=cpu, dtype=torch.uint8, is_shared=False),
reward: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.float32, is_shared=False),
terminated: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False),
truncated: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False)},
batch_size=torch.Size([3]),
device=None,
is_shared=False),
observation: Tensor(shape=torch.Size([3, 4]), device=cpu, dtype=torch.float32, is_shared=False),
pixels: Tensor(shape=torch.Size([3, 400, 600, 3]), device=cpu, dtype=torch.uint8, is_shared=False),
terminated: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False),
truncated: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.bool, is_shared=False)},
batch_size=torch.Size([3]),
device=None,
is_shared=False)
我们现已构建了一个能够根据其观测结果渲染图像的环境。 要录制视频,我们需要将该环境与一个录像器以及日志记录器相结合(日志记录器提供保存视频所需的后端支持)。 这一过程将在一个经过转换的环境中完成,就像我们在第一篇教程中所见到的那样。
from torchrl.record import VideoRecorder
recorder = VideoRecorder(logger, tag="my_video")
record_env = TransformedEnv(env, recorder)
在运行此环境时,所有 "pixels" 个条目将保存在本地缓冲区(即RAM)中,并按需转储到视频中(为防止RAM过度使用,建议在适当的时候调用此方法!):
rollout = record_env.rollout(max_steps=3)
# Uncomment this line to save the video on disk:
# recorder.dump()
在本特定情况下,可在实例化 CSVLogger 时选择视频格式。
(如果您希望自定义视频录制方式,请参阅我们的知识库。)
本入门教程涵盖的内容就到这里。 您现在已准备好编写您的 首个 TorchRL 训练循环!
脚本总运行时间: (0 分钟 15.685 秒)
估计内存使用量: 345 MB