注意
前往末尾 下载完整的示例代码。
开始使用日志记录¶
作者: Vincent Moens
注意
要在 notebook 中运行本教程,请在开头添加一个安装单元格,其中包含
!pip install tensordict !pip install torchrl
在我们将所有内容编排到一个训练脚本之前,本系列的最后一章是学习关于日志记录。
日志记录器¶
日志记录对于向外界报告您的结果以及检查您的算法是否正常学习至关重要。 TorchRL 具有多个日志记录器,它们与自定义后端接口,例如 wandb (WandbLogger
)、tensorboard (TensorBoardLogger
) 或轻量级且可移植的 CSV 日志记录器 (CSVLogger
),您几乎可以在任何地方使用它们。
日志记录器位于 torchrl.record
模块中,各种类可以在 API 参考 中找到。
考虑到底层后端的差异,我们尝试使日志记录器的 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 分钟 14.777 秒)
估计内存使用量: 349 MB