TransformedEnv¶
- class torchrl.envs.transforms.TransformedEnv(*args, **kwargs)[原始碼]¶
一個變換後的環境。
- 引數:
env (EnvBase) – 要進行變換的原始環境。
transform (Transform 或 可呼叫物件, 可選) –
應用於
env.step(td)產生的 tensordict 的變換。如果未提供,則使用處於 eval 模式的空 Compose 佔位符。注意
如果
transform是一個可呼叫物件,它必須接收一個 tensordict 作為輸入並輸出一個 tensordict。該可呼叫物件將在step和reset時刻被呼叫:如果它作用於獎勵(在 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() 物件中。
環境可能相似或不同,但假定它們之間很少或沒有互動(例如,多工或並行批次執行)。
- eval() TransformedEnv[原始碼]¶
將模組設定為評估模式。
這僅對某些模組有效。有關特定模組在訓練/評估模式下的行為詳情,即它們是否受到影響(例如
Dropout、BatchNorm等),請參閱其文件。這等同於呼叫
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複製到此模組及其後代模組中。如果
strict為True,則state_dict中的鍵必須與此模組的state_dict()函式返回的鍵完全匹配。警告
如果
assign為True,則最佳化器必須在呼叫load_state_dict之後建立,除非get_swap_module_params_on_conversion()為True。- 引數:
state_dict (字典) – 一個包含引數和持久緩衝區的字典。
strict (布林值, 可選) – 是否嚴格強制要求
state_dict中的鍵與此模組的state_dict()函式返回的鍵匹配。預設值:Trueassign (布林值, 可選) – 當設定為
False時,保留當前模組中張量的屬性,而設定為True時則保留 state dict 中張量的屬性。唯一的例外是Default: ``False`的requires_grad欄位
- 返回值:
- missing_keys 是一個字串列表,包含此模組期望但
在提供的
state_dict中缺失的任何鍵。
- unexpected_keys 是一個字串列表,包含此模組不期望但
在提供的
state_dict中存在的鍵。
- 返回型別:
包含
missing_keys和unexpected_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 中的隨機樣本進行更新。
- state_dict(*args, **kwargs) OrderedDict[原始碼]¶
返回一個字典,其中包含模組整個狀態的引用。
包含引數和持久緩衝區(例如,執行平均值)。鍵是對應的引數和緩衝區名稱。設定為
None的引數和緩衝區不包括在內。注意
返回的物件是一個淺複製。它包含對模組引數和緩衝區的引用。
警告
目前
state_dict()也按順序接受destination、prefix和keep_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) – 此模組中引數和緩衝區期望的浮點型或複數型 dtypetensor (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[原始碼]¶
將模組設定為訓練模式。
這僅對某些模組有效。有關特定模組在訓練/評估模式下的行為詳情,即它們是否受到影響(例如
Dropout、BatchNorm等),請參閱其文件。- 引數:
mode (布林值) – 是設定為訓練模式 (
True) 還是評估模式 (False)。預設值:True。- 返回值:
self
- 返回型別:
Module