TransformedEnv¶
- class torchrl.envs.transforms.TransformedEnv(*args, **kwargs)[來源]¶
一個 transformed_in 環境。
- 參數:
env (EnvBase) – 要 transformed_in 的原始環境。
transform (Transform 或 可呼叫物件, 選用) –
要應用於從
env.step(td)
產生的 tensordict 的轉換。如果未提供,則會使用評估模式中的空 Compose 預留位置。注意
如果
transform
是可呼叫物件,則它必須接收單個 tensordict 作為輸入並輸出 tensordict。可呼叫物件將在step
和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 (bool, 選用) – 如果
True
,規格將在第一次呼叫後永久快取(即,規格只會 transformed_in 一次)。如果轉換在訓練期間變更,則原始規格轉換可能不再有效,在這種情況下,此值應設定為 False。預設值為 True。
範例
>>> env = GymEnv("Pendulum-v0") >>> transform = RewardScaling(0.0, 1.0) >>> transformed_env = TransformedEnv(env, transform)
- add_truncated_keys() TransformedEnv [來源]¶
將截斷的鍵新增至環境。
- append_transform(transform: Union[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
- 傳回類型:
模組
- property input_spec: TensorSpec¶
轉換後環境的動作規格。
- 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 (dict) – 包含參數和持久緩衝區的 dict。
strict (bool, 選用) – 是否嚴格強制
state_dict
中的鍵與此模組的state_dict()
函數傳回的鍵相符。預設值:True
assign (bool, optional) – 當
False
時,目前模組中張量的屬性會被保留;當True
時,state dict 中張量的屬性會被保留。唯一的例外是requires_grad
欄位。Default: ``False`
- 傳回:
- missing_keys 是一個字串列表,包含任何預期
會在此模組中出現,但卻在提供的
state_dict
中遺失的鍵。
- unexpected_keys 是一個字串列表,包含任何未
預期會在此模組中出現,但卻在提供的
state_dict
中出現的鍵。
- 傳回類型:
NamedTuple
包含missing_keys
和unexpected_keys
欄位
注意
如果一個參數或緩衝區被註冊為
None
,且其對應的鍵存在於state_dict
中,load_state_dict()
將會引發RuntimeError
。
- property output_spec: TensorSpec¶
已轉換環境的觀測規格。
- state_dict(*args, **kwargs) OrderedDict [source]¶
返回一個字典,其中包含對模組整體狀態的引用。
參數和持久緩衝區(例如,運行平均值)都包含在內。鍵是對應的參數和緩衝區名稱。設定為
None
的參數和緩衝區不包含在內。注意
返回的物件是淺層副本。它包含對模組的參數和緩衝區的引用。
警告
目前
state_dict()
也接受位置引數,依序為destination
、prefix
和keep_vars
。然而,這已被棄用,且在未來版本中將強制使用關鍵字引數。警告
請避免使用引數
destination
,因為它並非為終端使用者設計。- 參數:
destination (dict, optional) – 如果提供,模組的狀態將會更新到此字典中,並返回相同的物件。否則,將會建立並返回
OrderedDict
。預設值:None
。prefix (str, optional) – 添加到參數和緩衝區名稱的前綴,以組成 state_dict 中的鍵。預設值:
''
。keep_vars (bool, optional) – 預設情況下,state dict 中返回的
Tensor
會從 autograd 分離。如果設定為True
,則不會執行分離。預設值:False
。
- 傳回:
包含模組整體狀態的字典
- 傳回類型:
dict
範例
>>> # xdoctest: +SKIP("undefined vars") >>> module.state_dict().keys() ['bias', 'weight']
- to(*args, **kwargs) TransformedEnv [source]¶
移動和/或轉換參數和緩衝區。
可以如下調用:
- to(device=None, dtype=None, non_blocking=False)[source]
- to(dtype, non_blocking=False)[source]
- to(tensor, non_blocking=False)[source]
- to(memory_format=torch.channels_last)[source]
其簽名與
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
- 傳回類型:
模組
範例
>>> # 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 [source]¶
將模組設定為訓練模式。
這僅對某些模組有效。請參閱特定模組的文件,以了解它們在訓練/評估模式下的行為詳情(如果它們受到影響),例如
Dropout
、BatchNorm
等。- 參數:
mode (bool) – 是否設定為訓練模式 (
True
) 或評估模式 (False
)。預設值:True
。- 傳回:
self
- 傳回類型:
模組