快捷方式

Hash

class torchrl.envs.transforms.Hash(in_keys: Sequence[NestedKey], out_keys: Sequence[NestedKey], in_keys_inv: Sequence[NestedKey] = None, out_keys_inv: Sequence[NestedKey] = None, *, hash_fn: Callable = None, seed: Any | None = None, use_raw_nontensor: bool = False, repertoire: tuple[tuple[int], Any] = None)[source]

向 tensordict 添加哈希值。

参数:
  • in_keys (NestedKey 序列) – 要哈希的值的键。

  • out_keys (NestedKey 序列) – 结果哈希的键。

  • in_keys_inv (NestedKey 序列, 可选) – 在 inv 调用期间要哈希的值的键。

  • out_keys_inv (NestedKey 序列, 可选) – 在 inv 调用期间结果哈希的键。

关键字参数:
  • hash_fn (Callable, 可选) – 要使用的哈希函数。函数签名必须为 (input: Any, seed: Any | None) -> torch.Tensor。如果此转换使用 seed 参数初始化,则仅使用 seed。默认为 Hash.reproducible_hash

  • seed (可选) – 如果哈希函数需要,用于哈希函数的种子。

  • use_raw_nontensor (bool, 可选) – 如果为 False,则在对 NonTensorData/NonTensorStack 输入调用 fn 之前,数据将从它们中提取。如果为 True,则原始 NonTensorData/NonTensorStack 输入将直接提供给 fn,后者必须支持这些输入。默认为 False

  • repertoire (Dict[Tuple[int], Any], 可选) – 如果给定,此字典存储从哈希到输入的逆映射。此库不会被复制,因此可以在转换实例化后在同一工作空间中修改它,并且这些修改将反映在映射中。缺少哈希将映射到 None。默认:None

  • Hash (>>> from torchrl.envs import GymEnv, UnaryTransform,) –

  • GymEnv (>>> env =) –

  • output (>>> # 处理字符串) –

  • env.append_transform( (>>> env =) –

  • UnaryTransform( (...) –

  • in_keys=["observation"], (...) –

  • out_keys=["observation_str"], (...) –

  • tensor (... fn=lambda) – str(tensor.numpy().tobytes())))

  • output

  • env.append_transform(

  • Hash( (...) –

  • in_keys=["observation_str"], (...) –

  • out_keys=["observation_hash"],) (...) –

  • ) (...) –

  • env.observation_spec (>>>) –

  • Composite(

    observation: BoundedContinuous(

    shape=torch.Size([3]), space=ContinuousBox(

    low=Tensor(shape=torch.Size([3]), device=cpu, dtype=torch.float32, contiguous=True), high=Tensor(shape=torch.Size([3]), device=cpu, dtype=torch.float32, contiguous=True)),

    device=cpu, dtype=torch.float32, domain=continuous),

    observation_str: NonTensor(

    shape=torch.Size([]), space=None, device=cpu, dtype=None, domain=None),

    observation_hash: UnboundedDiscrete(

    shape=torch.Size([32]), space=ContinuousBox(

    low=Tensor(shape=torch.Size([32]), device=cpu, dtype=torch.uint8, contiguous=True), high=Tensor(shape=torch.Size([32]), device=cpu, dtype=torch.uint8, contiguous=True)),

    device=cpu, dtype=torch.uint8, domain=discrete),

    device=None, shape=torch.Size([]))

  • env.rollout (>>>) –

  • TensorDict(

    fields={

    action: Tensor(shape=torch.Size([3, 1]), device=cpu, dtype=torch.float32, 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, 3]), device=cpu, dtype=torch.float32, is_shared=False), observation_hash: Tensor(shape=torch.Size([3, 32]), device=cpu, dtype=torch.uint8, is_shared=False), observation_str: NonTensorStack(

    [“b’g\x08\x8b\xbexav\xbf\x00\xee(>’”, “b’\x…, batch_size=torch.Size([3]), device=None),

    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, 3]), device=cpu, dtype=torch.float32, is_shared=False), observation_hash: Tensor(shape=torch.Size([3, 32]), device=cpu, dtype=torch.uint8, is_shared=False), observation_str: NonTensorStack(

    [“b’\xb5\x17\x8f\xbe\x88\xccu\xbf\xc0Vr?’”…, batch_size=torch.Size([3]), device=None),

    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)

  • env.check_env_specs() (>>>) –

  • succeeded! ([torchrl][INFO] check_env_specs) –

get_input_from_hash(hash_tensor)[source]

查找用于特定哈希输出的输入。

此功能仅在初始化期间提供了 :arg:`repertoire` 参数或同时提供了 :arg:`in_keys_inv`:arg:`out_keys_inv` 参数时才可用。

参数:

hash_tensor (Tensor) – 哈希输出。

返回:

用于生成哈希的输入。

返回类型:

任何

classmethod reproducible_hash(string, seed=None)[source]

使用种子从字符串创建可重现的 256 位哈希。

参数:
  • string (strNone) – 输入字符串。如果为 None,则使用空字符串 ""

  • seed (str, 可选) – 种子值。默认为 None

返回:

形状为 (32,),dtype 为 torch.uint8

返回类型:

张量

state_dict(*args, destination=None, prefix='', keep_vars=False)[source]

返回一个字典,其中包含对模块整个状态的引用。

参数和持久缓冲区(例如,运行平均值)都包含在内。键是相应的参数和缓冲区名称。设置为 None 的参数和缓冲区不包含在内。

注意

返回的对象是浅拷贝。它包含对模块参数和缓冲区的引用。

警告

目前 state_dict() 也接受 destinationprefixkeep_vars 的位置参数。但是,这正在被弃用,并且将在未来的版本中强制使用关键字参数。

警告

请避免使用参数 destination,因为它不是为最终用户设计的。

参数:
  • destination (dict, 可选) – 如果提供,模块的状态将更新到 dict 中,并且返回相同的对象。否则,将创建一个 OrderedDict 并返回。默认:None

  • prefix (str, optional) – a prefix added to parameter and buffer names to compose the keys in state_dict. Default: ''

  • keep_vars (bool, 可选) – 默认情况下,状态字典中返回的 Tensor s 将从 autograd 中分离。如果设置为 True,则不会执行分离。默认:False

返回:

包含模块整体状态的字典

返回类型:

dict

示例

>>> # xdoctest: +SKIP("undefined vars")
>>> module.state_dict().keys()
['bias', 'weight']

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源