Actor¶
- class torchrl.modules.tensordict_module.Actor(*args, **kwargs)[原始碼]¶
強化學習中用於確定性 Actor 的通用類。
Actor 類帶有預設的 out_keys 值 (
["action"]),並且如果提供了 spec 但不是Composite物件,它將自動轉換為spec = Composite(action=spec)。- 引數:
module (nn.Module) – 一個
Module,用於將輸入對映到輸出引數空間。in_keys (字串可迭代物件, 可選) – 從輸入 tensordict 讀取並傳遞給 module 的鍵。如果包含多個元素,值將按照 in_keys 迭代器給定的順序傳遞。預設為
["observation"]。out_keys (字串可迭代物件) – 要寫入輸入 tensordict 的鍵。out_keys 的長度必須與嵌入的 module 返回的張量數量匹配。使用
"_"作為鍵可以避免將張量寫入輸出。預設為["action"]。
- 關鍵字引數:
spec (TensorSpec, 可選) – 僅限關鍵字引數。輸出張量的規格。如果 module 輸出多個張量,spec 描述第一個輸出張量的空間。
safe (bool) – 僅限關鍵字引數。如果為
True,輸出值將對照輸入規格進行檢查。由於探索策略或數值下溢/溢位問題,可能會發生域外取樣。如果此值超出範圍,將使用project()方法將其投影回期望空間。預設為False。
示例
>>> import torch >>> from tensordict import TensorDict >>> from torchrl.data import Unbounded >>> from torchrl.modules import Actor >>> torch.manual_seed(0) >>> td = TensorDict({"observation": torch.randn(3, 4)}, [3,]) >>> action_spec = Unbounded(4) >>> module = torch.nn.Linear(4, 4) >>> td_module = Actor( ... module=module, ... spec=action_spec, ... ) >>> td_module(td) TensorDict( fields={ action: Tensor(shape=torch.Size([3, 4]), device=cpu, dtype=torch.float32, is_shared=False), observation: Tensor(shape=torch.Size([3, 4]), device=cpu, dtype=torch.float32, is_shared=False)}, batch_size=torch.Size([3]), device=None, is_shared=False) >>> print(td.get("action")) tensor([[-1.3635, -0.0340, 0.1476, -1.3911], [-0.1664, 0.5455, 0.2247, -0.4583], [-0.2916, 0.2160, 0.5337, -0.5193]], grad_fn=<AddmmBackward0>)