注意
前往結尾以下載完整的範例程式碼。
開始使用日誌記錄¶
作者: 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 分鐘 14.777 秒)
預估記憶體使用量: 349 MB