快捷方式

LossModule

torchrl.objectives.LossModule(*args, **kwargs)[源代码]

RL 损失函数的父类。

LossModule 继承自 nn.Module。它旨在读取输入的 TensorDict 并返回另一个 tensordict,其中包含名为 "loss_*" 的损失键。

将损失分解为其组成部分,然后由训练器用于记录训练过程中的各种损失值。输出 tensordict 中存在的其他标量也会被记录。

变量:

default_value_estimator – 类的默认值类型。需要值估计的损失函数配备了默认值指针。此类属性指示在未指定其他值估计器时将使用哪个值估计器。可以使用 make_value_estimator() 方法更改值估计器。

默认情况下,forward 方法始终使用 gh torchrl.envs.ExplorationType.MEAN 进行修饰

要利用通过 set_keys() 配置 tensordict 键的能力,子类必须定义一个 _AcceptedKeys 数据类。此数据类应包含所有预期可配置的键。此外,子类必须实现 :meth:._forward_value_estimator_keys() 方法。此函数对于将任何修改后的 tensordict 键转发到底层 value_estimator 至关重要。

示例

>>> class MyLoss(LossModule):
>>>     @dataclass
>>>     class _AcceptedKeys:
>>>         action = "action"
>>>
>>>     def _forward_value_estimator_keys(self, **kwargs) -> None:
>>>         pass
>>>
>>> loss = MyLoss()
>>> loss.set_keys(action="action2")

注意

当将用探索模块包装或增强的策略传递给损失函数时,我们希望通过 set_exploration_type(<exploration>) 来禁用探索,其中 <exploration> 可以是 ExplorationType.MEANExplorationType.MODEExplorationType.DETERMINISTIC。默认值为 DETERMINISTIC,通过 deterministic_sampling_mode 损失属性设置。如果需要其他探索模式(或如果 DETERMINISTIC 不可用),可以更改此属性的值,这将改变模式。

convert_to_functional(module: TensorDictModule, module_name: str, expand_dim: Optional[int] = None, create_target_params: bool = False, compare_against: Optional[List[Parameter]] = None, **kwargs) None[源代码]

将模块转换为函数式以便在损失函数中使用。

参数:
  • module (TensorDictModule兼容类型) – 一个有状态的 tensordict 模块。此模块的参数将被隔离在 <module_name>_params 属性中,并且此模块的无状态版本将注册在 module_name 属性下。

  • module_name (str) – 查找模块的名称。模块的参数将在 loss_module.<module_name>_params 下找到,而模块将在 loss_module.<module_name> 下找到。

  • expand_dim (int, 可选) –

    如果提供,模块的参数

    将沿第一个维度扩展 N 次,其中 N = expand_dim。当需要使用具有多个配置的目标网络时,应使用此选项。

    注意

    如果提供了 compare_against 值列表,则结果参数将仅是原始参数的独立(detached)扩展。如果未提供 compare_against,则参数的值将在参数内容的最小值和最大值之间均匀重采样。

    create_target_params (bool, 可选): 如果为 True,则会提供一个独立的(detached)

    参数副本,用于提供给目标网络,名称为 loss_module.<module_name>_target_params。如果为 False(默认),此属性仍然可用,但它将是参数的一个独立(detached)实例,而非副本。换句话说,参数值的任何修改将直接反映在目标参数中。

  • compare_against (参数可迭代对象, 可选) – 如果提供,此参数列表将用作模块参数的比较集。如果参数被扩展(expand_dim > 0),则模块的结果参数将是原始参数的简单扩展。否则,结果参数将是原始参数的独立(detached)版本。如果为 None,则结果参数将按预期带有梯度。

forward(tensordict: TensorDictBase) TensorDictBase[源代码]

它旨在读取输入的 TensorDict 并返回另一个 tensordict,其中包含名为“loss*”的损失键。

将损失分解为其组成部分,然后由训练器用于记录训练过程中的各种损失值。输出 tensordict 中存在的其他标量也会被记录。

参数:

tensordict – 包含计算损失所需值的输入 tensordict。

返回值:

一个不带批量维度的新的 tensordict,包含各种损失标量,这些标量将命名为“loss*”。损失以这种名称返回至关重要,因为它们将在反向传播之前由训练器读取。

from_stateful_net(network_name: str, stateful_net: Module)[源代码]

根据网络的有状态版本填充模型的参数。

有关如何获取网络的有状态版本的详细信息,请参阅 get_stateful_net()

参数:
  • network_name (str) – 要重置的网络名称。

  • stateful_net (nn.Module) – 应从中获取参数的有状态网络。

属性 functional

模块是否为函数式的。

除非特别设计为非函数式,否则所有损失函数都是函数式的。

get_stateful_net(network_name: str, copy: bool | None = None)[源代码]

返回网络的有状态版本。

这可用于初始化参数。

此类网络通常无法直接调用,需要通过 vmap 调用才能执行。

参数:
  • network_name (str) – 要获取的网络名称。

  • copy (bool, 可选) –

    如果为 True,则对网络进行深拷贝。默认为 True

    注意

    如果模块不是函数式的,则不进行拷贝。

make_value_estimator(value_type: Optional[ValueEstimators] = None, **hyperparams)[源代码]

值函数构造器。

如果需要非默认值函数,则必须使用此方法构建。

参数:
  • value_type (值估计器) – 一个 ValueEstimators 枚举类型,指示要使用的值函数。如果未提供,将使用存储在 default_value_estimator 属性中的默认值。结果值估计器类将注册在 self.value_type 中,以便将来进行细化。

  • **hyperparams – 用于值函数的超参数。如果未提供,将使用 default_value_kwargs() 指示的值。

示例

>>> from torchrl.objectives import DQNLoss
>>> # initialize the DQN loss
>>> actor = torch.nn.Linear(3, 4)
>>> dqn_loss = DQNLoss(actor, action_space="one-hot")
>>> # updating the parameters of the default value estimator
>>> dqn_loss.make_value_estimator(gamma=0.9)
>>> dqn_loss.make_value_estimator(
...     ValueEstimators.TD1,
...     gamma=0.9)
>>> # if we want to change the gamma value
>>> dqn_loss.make_value_estimator(dqn_loss.value_type, gamma=0.9)
named_parameters(prefix: str = '', recurse: bool = True) Iterator[Tuple[str, Parameter]][源代码]

返回一个模块参数的迭代器,同时生成参数的名称和参数本身。

参数:
  • prefix (str) – 要前置到所有参数名称的前缀。

  • recurse (bool) – 如果为 True,则生成此模块和所有子模块的参数。否则,仅生成属于此模块直接成员的参数。

  • remove_duplicate (bool, 可选) – 是否移除结果中的重复参数。默认为 True。

生成内容:

(str, Parameter) – 包含名称和参数的元组

示例

>>> # xdoctest: +SKIP("undefined vars")
>>> for name, param in self.named_parameters():
>>>     if name in ['bias']:
>>>         print(param.size())
parameters(recurse: bool = True) Iterator[Parameter][源代码]

返回一个模块参数的迭代器。

这通常传递给优化器。

参数:

recurse (bool) – 如果为 True,则生成此模块和所有子模块的参数。否则,仅生成属于此模块直接成员的参数。

生成内容:

Parameter – 模块参数

示例

>>> # xdoctest: +SKIP("undefined vars")
>>> for param in model.parameters():
>>>     print(type(param), param.size())
<class 'torch.Tensor'> (20L,)
<class 'torch.Tensor'> (20L, 1L, 5L, 5L)
reset_parameters_recursive()[源代码]

重置模块的参数。

set_keys(**kwargs) None[源代码]

设置 tensordict 键的名称。

示例

>>> from torchrl.objectives import DQNLoss
>>> # initialize the DQN loss
>>> actor = torch.nn.Linear(3, 4)
>>> dqn_loss = DQNLoss(actor, action_space="one-hot")
>>> dqn_loss.set_keys(priority_key="td_error", action_value_key="action_value")
属性 value_estimator: ValueEstimatorBase

值函数将来自后续状态/状态-动作对的奖励和值估计融合到值网络的目标值估计中。

属性 vmap_randomness

Vmap 随机模式。

vmap 随机模式控制 vmap() 在处理具有随机结果的函数(如 randn()rand())时应执行的操作。如果为 “error”,任何随机函数都将引发异常,表明 vmap 不知道如何处理随机调用。

如果为 “different”,则沿其调用 vmap 的批处理的每个元素将表现不同。如果为 “same”,vmap 将在所有元素中复制相同的结果。

如果未检测到随机模块,则 vmap_randomness 默认为 “error”,否则默认为 “different”。默认情况下,只有有限数量的模块被列为随机模块,但可以使用 add_random_module() 函数扩展此列表。

此属性支持设置其值。

文档

获取 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得问题解答

查看资源