快捷方式

TransformedEnv

class torchrl.envs.transforms.TransformedEnv(*args, **kwargs)[原始碼]

一個變換後的環境。

引數:
  • env (EnvBase) – 要進行變換的原始環境。

  • transform (Transform可呼叫物件, 可選) –

    應用於 env.step(td) 產生的 tensordict 的變換。如果未提供,則使用處於 eval 模式的空 Compose 佔位符。

    注意

    如果 transform 是一個可呼叫物件,它必須接收一個 tensordict 作為輸入並輸出一個 tensordict。該可呼叫物件將在 stepreset 時刻被呼叫:如果它作用於獎勵(在 reset 時刻不存在),則需要實現一個檢查以確保變換順利執行。

    >>> def add_1(data):
    ...     if "reward" in data.keys():
    ...         return data.set("reward", data.get("reward") + 1)
    ...     return data
    >>> env = TransformedEnv(base_env, add_1)
    

  • cache_specs (布林值, 可選) – 如果為 True,則 spec 將在第一次呼叫後被一次性快取(即 spec 只會被變換一次)。如果在訓練期間變換髮生變化,原始 spec 變換可能不再有效,在這種情況下,此值應設定為 False。預設值:True

示例

>>> env = GymEnv("Pendulum-v0")
>>> transform = RewardScaling(0.0, 1.0)
>>> transformed_env = TransformedEnv(env, transform)
add_truncated_keys() TransformedEnv[原始碼]

向環境中新增截斷鍵。

append_transform(transform: Transform | Callable[[TensorDictBase], TensorDictBase]) TransformedEnv[原始碼]

向環境中追加一個變換。

接受 Transform 或可呼叫物件。

property batch_locked: bool

環境是否可以與初始化時不同的批處理大小一起使用。

如果為 True,則環境必須與具有相同批處理大小的 tensordict 一起使用。batch_locked 是一個不可變屬性。

property batch_size: Size

在此環境例項中批次處理的環境數量,組織在 torch.Size() 物件中。

環境可能相似或不同,但假定它們之間很少或沒有互動(例如,多工或並行批次執行)。

empty_cache()[原始碼]

擦除所有快取值。

對於常規環境,鍵列表(獎勵、完成等)會被快取,但在某些情況下,它們可能在程式碼執行期間發生變化(例如,新增變換時)。

eval() TransformedEnv[原始碼]

將模組設定為評估模式。

這僅對某些模組有效。有關特定模組在訓練/評估模式下的行為詳情,即它們是否受到影響(例如 DropoutBatchNorm 等),請參閱其文件。

這等同於呼叫 self.train(False)

有關 .eval() 與可能混淆的幾種類似機制之間的比較,請參閱區域性停用梯度計算

返回值:

self

返回型別:

Module

property input_spec: TensorSpec

變換後環境的觀測 spec。

insert_transform(index: int, transform: Transform) TransformedEnv[原始碼]

在指定索引處向環境中插入一個變換。

接受 Transform 或可呼叫物件。

load_state_dict(state_dict: OrderedDict, **kwargs) None[原始碼]

將引數和緩衝區從 state_dict 複製到此模組及其後代模組中。

如果 strictTrue,則 state_dict 中的鍵必須與此模組的 state_dict() 函式返回的鍵完全匹配。

警告

如果 assignTrue,則最佳化器必須在呼叫 load_state_dict 之後建立,除非 get_swap_module_params_on_conversion()True

引數:
  • state_dict (字典) – 一個包含引數和持久緩衝區的字典。

  • strict (布林值, 可選) – 是否嚴格強制要求 state_dict 中的鍵與此模組的 state_dict() 函式返回的鍵匹配。預設值:True

  • assign (布林值, 可選) – 當設定為 False 時,保留當前模組中張量的屬性,而設定為 True 時則保留 state dict 中張量的屬性。唯一的例外是 Default: ``False`requires_grad 欄位

返回值:

  • missing_keys 是一個字串列表,包含此模組期望但

    在提供的 state_dict 中缺失的任何鍵。

  • unexpected_keys 是一個字串列表,包含此模組不期望但

    在提供的 state_dict 中存在的鍵。

返回型別:

包含 missing_keysunexpected_keys 欄位的 NamedTuple

注意

如果某個引數或緩衝區被註冊為 None 且其對應鍵存在於 state_dict 中,則 load_state_dict() 將引發 RuntimeError

property output_spec: TensorSpec

變換後環境的觀測 spec。

rand_action(tensordict: Optional[TensorDictBase] = None) TensorDict[原始碼]

根據 action_spec 屬性執行一個隨機動作。

引數:

tensordict (TensorDictBase, 可選) – 應寫入結果動作的 tensordict。

返回值:

一個 tensordict 物件,其“action”條目已使用 action-spec 中的隨機樣本進行更新。

set_missing_tolerance(mode=False)[原始碼]

指示當輸入 tensordict 中缺少 in_key 時是否應引發 KeyError。

set_seed(seed: Optional[int] = None, static_seed: bool =False) Optional[int][原始碼]

設定環境的種子。

state_dict(*args, **kwargs) OrderedDict[原始碼]

返回一個字典,其中包含模組整個狀態的引用。

包含引數和持久緩衝區(例如,執行平均值)。鍵是對應的引數和緩衝區名稱。設定為 None 的引數和緩衝區不包括在內。

注意

返回的物件是一個淺複製。它包含對模組引數和緩衝區的引用。

警告

目前 state_dict() 也按順序接受 destinationprefixkeep_vars 的位置引數。然而,這正在被棄用,未來版本將強制使用關鍵字引數。

警告

請避免使用引數 destination,因為它並非為終端使用者設計。

引數:
  • destination (字典, 可選) – 如果提供,模組的狀態將更新到此字典中並返回同一物件。否則,將建立一個 OrderedDict 並返回。預設值:None

  • prefix (字串, 可選) – 新增到引數和緩衝區名稱的字首,用於構成 state_dict 中的鍵。預設值:''

  • keep_vars (布林值, 可選) – 預設情況下,state dict 中返回的 Tensor 會與 autograd 分離。如果設定為 True,則不會進行分離。預設值:False

返回值:

一個包含模組整個狀態的字典

返回型別:

字典

示例

>>> # xdoctest: +SKIP("undefined vars")
>>> module.state_dict().keys()
['bias', 'weight']
to(*args, **kwargs) TransformedEnv[原始碼]

移動和/或轉換引數和緩衝區的資料型別。

可按以下方式呼叫:

to(device=None, dtype=None, non_blocking=False)[原始碼]
to(dtype, non_blocking=False)[原始碼]
to(tensor, non_blocking=False)[原始碼]
to(memory_format=torch.channels_last)[原始碼]

其簽名類似於 torch.Tensor.to(),但只接受浮點型或複數型的 dtype。此外,此方法僅會將浮點型或複數型的引數和緩衝區轉換為指定的 dtype(如果給出)。整型引數和緩衝區如果給出 device,則會被移動到該裝置,但其 dtype 不會改變。當設定 non_blocking 時,如果可能,它會嘗試相對於主機進行非同步轉換/移動,例如將具有固定記憶體的 CPU 張量移動到 CUDA 裝置。

示例見下文。

注意

此方法會就地修改模組。

引數:
  • device (torch.device) – 此模組中引數和緩衝區期望的裝置

  • dtype (torch.dtype) – 此模組中引數和緩衝區期望的浮點型或複數型 dtype

  • tensor (torch.Tensor) – 此張量的 dtype 和裝置是此模組中所有引數和緩衝區期望的 dtype 和裝置

  • memory_format (torch.memory_format) – 此模組中 4D 引數和緩衝區期望的記憶體格式(僅關鍵字引數)

返回值:

self

返回型別:

Module

示例

>>> # xdoctest: +IGNORE_WANT("non-deterministic")
>>> linear = nn.Linear(2, 2)
>>> linear.weight
Parameter containing:
tensor([[ 0.1913, -0.3420],
        [-0.5113, -0.2325]])
>>> linear.to(torch.double)
Linear(in_features=2, out_features=2, bias=True)
>>> linear.weight
Parameter containing:
tensor([[ 0.1913, -0.3420],
        [-0.5113, -0.2325]], dtype=torch.float64)
>>> # xdoctest: +REQUIRES(env:TORCH_DOCTEST_CUDA1)
>>> gpu1 = torch.device("cuda:1")
>>> linear.to(gpu1, dtype=torch.half, non_blocking=True)
Linear(in_features=2, out_features=2, bias=True)
>>> linear.weight
Parameter containing:
tensor([[ 0.1914, -0.3420],
        [-0.5112, -0.2324]], dtype=torch.float16, device='cuda:1')
>>> cpu = torch.device("cpu")
>>> linear.to(cpu)
Linear(in_features=2, out_features=2, bias=True)
>>> linear.weight
Parameter containing:
tensor([[ 0.1914, -0.3420],
        [-0.5112, -0.2324]], dtype=torch.float16)

>>> linear = nn.Linear(2, 2, bias=None).to(torch.cdouble)
>>> linear.weight
Parameter containing:
tensor([[ 0.3741+0.j,  0.2382+0.j],
        [ 0.5593+0.j, -0.4443+0.j]], dtype=torch.complex128)
>>> linear(torch.ones(3, 2, dtype=torch.cdouble))
tensor([[0.6122+0.j, 0.1150+0.j],
        [0.6122+0.j, 0.1150+0.j],
        [0.6122+0.j, 0.1150+0.j]], dtype=torch.complex128)
train(mode: bool =True) TransformedEnv[原始碼]

將模組設定為訓練模式。

這僅對某些模組有效。有關特定模組在訓練/評估模式下的行為詳情,即它們是否受到影響(例如 DropoutBatchNorm 等),請參閱其文件。

引數:

mode (布林值) – 是設定為訓練模式 (True) 還是評估模式 (False)。預設值:True

返回值:

self

返回型別:

Module

文件

查閱 PyTorch 的全面開發者文件

檢視文件

教程

獲取面向初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源