Actor¶
- class torchrl.modules.tensordict_module.Actor(*args, **kwargs)[源代码]¶
RL 中确定性 actor 的通用类。
Actor 类带有
out_keys
的默认值(["action"]
),如果提供了 spec 但不是Composite
对象,它将被自动转换为spec = Composite(action=spec)
。- 参数:
module (nn.Module) – 一个
Module
,用于将输入映射到输出参数空间。in_keys (iterable of str, optional) – 要从输入 tensordict 中读取并传递给 module 的键。如果包含多个元素,则值将按 in_keys 可迭代对象给出的顺序传递。默认为
["observation"]
。out_keys (iterable of str) – 要写入输入 tensordict 的键。out_keys 的长度必须与嵌入式 module 返回的 tensor 数量匹配。使用
"_"
作为键可以避免将 tensor 写入输出。默认为["action"]
。
- 关键字参数:
spec (TensorSpec, optional) – 仅关键字参数。输出 tensor 的 spec。如果 module 输出多个 tensor,spec 表征第一个输出 tensor 的空间。
safe (bool) – 仅关键字参数。如果为
True
,则将输出值与输入 spec 进行检查。由于探索策略或数值下溢/上溢问题,可能会发生域外采样。如果此值超出边界,则使用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>)