注意
转到结尾 下载完整的示例代码。
开始使用日志记录¶
**作者**:Vincent Moens
注意
要在笔记本中运行本教程,请在开头添加一个包含以下内容的安装单元格
!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 分 13.804 秒)
**估计内存使用量:**347 MB