RewardSum¶
- class torchrl.envs.transforms.RewardSum(in_keys: Sequence[NestedKey] | None = None, out_keys: Sequence[NestedKey] | None = None, reset_keys: Sequence[NestedKey] | None = None, *, reward_spec: bool = False)[原始碼]¶
跟蹤每輪的累積獎勵。
此轉換器接受 tensordict 獎勵鍵的列表(即 'in_keys'),並在每輪的時間維度上跟蹤它們的累積值。
呼叫時,轉換器會為每個 `in_key` 寫入一個新的 tensordict 條目,命名為 `episode_{in_key}`,其中包含累積值。
- 引數:
in_keys(NestedKeys 列表,可選)– 輸入獎勵鍵。所有 'in_keys' 都應是環境 reward_spec 的一部分。如果未指定 `in_keys`,則此轉換器假定 'reward' 是輸入鍵。但是,也可以指定多個獎勵(例如,“reward1” 和 “reward2”)。
out_keys(NestedKeys 列表,可選)– 輸出總和鍵,每個輸入鍵應有一個。
reset_keys(NestedKeys 列表,可選)– 要使用的 reset_keys 列表,如果找不到父環境。如果提供,此值將優先於環境 `reset_keys`。
- 關鍵字引數:
reward_spec(bool,可選)– 如果為 `True`,則新的獎勵條目將在 reward specs 中註冊。預設為 `False`(在 `observation_specs` 中註冊)。
示例
>>> from torchrl.envs.transforms import RewardSum, TransformedEnv >>> from torchrl.envs.libs.gym import GymEnv >>> env = TransformedEnv(GymEnv("CartPole-v1"), RewardSum()) >>> env.set_seed(0) >>> torch.manual_seed(0) >>> td = env.reset() >>> print(td["episode_reward"]) tensor([0.]) >>> td = env.rollout(3) >>> print(td["next", "episode_reward"]) tensor([[1.], [2.], [3.]])
- forward(tensordict: TensorDictBase) TensorDictBase[原始碼]¶
讀取輸入 tensordict,並對選定的鍵應用轉換。
預設情況下,此方法
直接呼叫
_apply_transform()。不呼叫
_step()或_call()。
此方法不會在任何時候在 env.step 中呼叫。但是,它會在
sample()中呼叫。注意
forward也可以使用dispatch將引數名稱轉換為鍵,並使用常規關鍵字引數。示例
>>> class TransformThatMeasuresBytes(Transform): ... '''Measures the number of bytes in the tensordict, and writes it under `"bytes"`.''' ... def __init__(self): ... super().__init__(in_keys=[], out_keys=["bytes"]) ... ... def forward(self, tensordict: TensorDictBase) -> TensorDictBase: ... bytes_in_td = tensordict.bytes() ... tensordict["bytes"] = bytes ... return tensordict >>> t = TransformThatMeasuresBytes() >>> env = env.append_transform(t) # works within envs >>> t(TensorDict(a=0)) # Works offline too.
- transform_input_spec(input_spec: TensorSpec) TensorSpec[原始碼]¶
轉換輸入規範,使結果規範與轉換對映匹配。
- 引數:
input_spec (TensorSpec) – 轉換前的規範
- 返回:
轉換後的預期規範
- transform_observation_spec(observation_spec: TensorSpec) TensorSpec[原始碼]¶
轉換 observation spec,新增 RewardSum 生成的新鍵。
- transform_reward_spec(reward_spec: TensorSpec) TensorSpec[原始碼]¶
轉換獎勵的 spec,使其與變換對映匹配。
- 引數:
reward_spec (TensorSpec) – 變換前的 spec
- 返回:
轉換後的預期規範