快捷方式

CompositeSpec

class torchrl.data.CompositeSpec(*args, **kwargs)[原始碼]

torchrl.data.Composite 的已棄用版本。

assert_is_in(value: Tensor) None

斷言張量是否屬於該框,否則會引發例外。

參數:

value (torch.Tensor) – 要檢查的值。

clear_device_()

清除 Composite 的裝置。

clone() Composite

建立 TensorSpec 的副本。

contains(item: torch.Tensor | tensordict.base.TensorDictBase) bool

如果數值 val 有可能由 TensorSpec 產生,則回傳 True,否則回傳 False

更多資訊請參閱 is_in()

cpu()

將 TensorSpec 轉換為 ‘cpu’ 裝置。

cuda(device=None)

將 TensorSpec 轉換為 ‘cuda’ 裝置。

property device: Union[device, str, int]

Spec 的裝置。

只有 Composite specs 可以有 None 裝置。所有葉節點都必須有非空的裝置。

empty()

建立一個類似 self 的 spec,但不包含任何條目。

encode(vals: Dict[str, Any], *, ignore_device: bool = False) Dict[str, Tensor]

根據指定的 spec 編碼一個數值,並回傳對應的 tensor。

此方法用於回傳一個可以輕易映射到 TorchRL 所需網域的數值(例如 numpy 陣列)的環境中。如果該數值已經是一個 tensor,spec 將不會改變它的值,並原樣回傳它。

參數:

val (np.ndarray or torch.Tensor) – 要編碼為 tensor 的數值。

Keyword Arguments:

ignore_device (bool, optional) – 如果 True,則會忽略 spec 裝置。這用於將 tensor 轉換分組到 TensorDict(..., device="cuda") 的呼叫中,這樣會更快。

Returns:

符合所需 tensor specs 的 torch.Tensor。

expand(*shape)

回傳一個具有展開形狀的新 Spec。

參數:

*shape (tuple or iterable of int) – Spec 的新形狀。必須與目前的形狀可廣播:其長度必須至少與目前形狀的長度一樣長,且其最後的值也必須相容;也就是說,只有在目前維度是單例時,它們才能與之不同。

flatten(start_dim: int, end_dim: int) T

展平一個 TensorSpec

有關此方法的更多資訊,請參閱 flatten()

get(item, default=_NoDefault.ZERO)

從 Composite 取得一個項目。

如果該項目不存在,可以傳遞一個預設值。

classmethod implements_for_spec(torch_function: Callable) Callable

為 TensorSpec 註冊一個 torch function 覆寫。

abstract index(index: Union[int, Tensor, ndarray, slice, List], tensor_to_index: torch.Tensor | tensordict.base.TensorDictBase) torch.Tensor | tensordict.base.TensorDictBase

索引輸入張量。

參數:
  • index (int, torch.Tensor, slicelist) – 張量的索引

  • tensor_to_index – 要被索引的張量

Returns:

已索引的張量

is_empty()

判斷 composite spec 是否包含 specs。

is_in(val: Union[dict, TensorDictBase]) bool

如果數值 val 有可能由 TensorSpec 產生,則回傳 True,否則回傳 False

更精確地說,is_in 方法會檢查數值 val 是否在 space 屬性 (box) 定義的範圍內,並且 dtypedeviceshape,以及潛在的其他 metadata 是否與 spec 的 metadata 相符。如果這些檢查中有任何一項失敗,is_in 方法將會傳回 False

參數:

val (torch.Tensor) – 要被檢查的數值。

Returns:

布林值,指示數值是否屬於 TensorSpec box。

items(include_nested: bool = False, leaves_only: bool = False, *, is_leaf: Optional[Callable[[type], bool]] = None) _CompositeSpecItemsView

Composite 的項目。

參數:
  • include_nested (bool, optional) – 如果 False,傳回的鍵將不會是巢狀的。它們只會代表根的直接子節點,而不是整個巢狀序列,例如 Composite(next=Composite(obs=None)) 將會產生鍵 ["next"]。預設值為 ``False`,也就是說不會傳回巢狀鍵。

  • leaves_only (bool, optional) – 如果 False,傳回的值將包含每個巢狀層級,例如 Composite(next=Composite(obs=None)) 將會產生鍵 ["next", ("next", "obs")]。預設值為 False

Keyword Arguments:

is_leaf (callable, optional) – 讀取類型並傳回一個布林值,指示是否應將該類型視為葉節點。預設情況下,所有非 Composite 節點都會被視為葉節點。

keys(include_nested: bool = False, leaves_only: bool = False, *, is_leaf: Optional[Callable[[type], bool]] = None) _CompositeSpecKeysView

Composite 的鍵。

鍵的參數反映了 tensordict.TensorDict 的參數。

參數:
  • include_nested (bool, optional) – 如果 False,傳回的鍵將不會是巢狀的。它們只會代表根的直接子節點,而不是整個巢狀序列,例如 Composite(next=Composite(obs=None)) 將會產生鍵 ["next"]。預設值為 ``False`,也就是說不會傳回巢狀鍵。

  • leaves_only (bool, optional) – 如果 False,傳回的值將包含每個巢狀層級,例如 Composite(next=Composite(obs=None)) 將會產生鍵 ["next", ("next", "obs")]。預設值為 False

Keyword Arguments:

is_leaf (callable, optional) – 讀取類型並傳回一個布林值,指示是否應將該類型視為葉節點。預設情況下,所有非 Composite 節點都會被視為葉節點。

lock_(recurse=False)

鎖定 Composite 並防止修改其內容。

這只是一個第一層級的鎖,除非透過 recurse 參數另有指定。

葉節點的規格始終可以就地修改,但不能在其 Composite 父節點中被替換。

範例

>>> shape = [3, 4, 5]
>>> spec = Composite(
...         a=Composite(
...         b=Composite(shape=shape[:3], device="cpu"), shape=shape[:2]
...     ),
...     shape=shape[:1],
... )
>>> spec["a"] = spec["a"].clone()
>>> recurse = False
>>> spec.lock_(recurse=recurse)
>>> try:
...     spec["a"] = spec["a"].clone()
... except RuntimeError:
...     print("failed!")
failed!
>>> try:
...     spec["a", "b"] = spec["a", "b"].clone()
...     print("succeeded!")
... except RuntimeError:
...     print("failed!")
succeeded!
>>> recurse = True
>>> spec.lock_(recurse=recurse)
>>> try:
...     spec["a", "b"] = spec["a", "b"].clone()
...     print("succeeded!")
... except RuntimeError:
...     print("failed!")
failed!
make_neg_dim(dim: int) T

將特定的維度轉換為 -1

property ndim

規格形狀的維度數量。

len(spec.shape) 的捷徑。

ndimension()

規格形狀的維度數量。

len(spec.shape) 的捷徑。

one(shape: Optional[Size] = None) torch.Tensor | tensordict.base.TensorDictBase

在 box 中傳回一個填滿 1 的 tensor。

注意

即使無法保證 1 屬於 spec 域,當違反此條件時,此方法也不會引發例外。 one 的主要用例是生成空的數據緩衝區,而不是有意義的數據。

參數:

shape (torch.Size) – one-tensor 的形狀

Returns:

在 TensorSpec box 中採樣的一個填滿 1 的 tensor。

ones(shape: Optional[Size] = None) torch.Tensor | tensordict.base.TensorDictBase

代理 one()

project(val: TensorDictBase) TensorDictBase

如果輸入 tensor 不在 TensorSpec box 中,則使用一些定義的啟發法將其映射回 box。

參數:

val (torch.Tensor) – 要映射到 box 的 tensor。

Returns:

屬於 TensorSpec box 的 torch.Tensor。

rand(shape: Optional[Size] = None) TensorDictBase

傳回 spec 定義的空間中的隨機 tensor。

將在空間上均勻地進行採樣,除非 box 是無界的,在這種情況下將繪製常態值。

參數:

shape (torch.Size) – 隨機 tensor 的形狀

Returns:

在 TensorSpec box 中採樣的隨機 tensor。

reshape(*shape) T

重新塑造 TensorSpec

有關此方法的更多資訊,請參閱 reshape()

sample(shape: Optional[Size] = None) torch.Tensor | tensordict.base.TensorDictBase

傳回 spec 定義的空間中的隨機 tensor。

有關詳細資訊,請參閱 rand()

squeeze(dim: Optional[int] = None)

傳回一個新的 Spec,其中移除了所有大小為 1 的維度。

當給定 dim 時,僅在該維度上執行 squeeze 操作。

參數:

dim (intNone) – 要應用 squeeze 操作的維度

to(dest: Union[dtype, device, str, int]) Composite

將 TensorSpec 轉換為裝置或 dtype。

如果沒有進行任何變更,則傳回相同的 spec。

to_numpy(val: TensorDict, safe: Optional[bool] = None) dict

傳回輸入張量對應的 np.ndarray

此函數的目的是作為 encode() 的反向操作。

參數:
  • val (torch.Tensor) – 要轉換為 numpy 的張量。

  • safe (bool) – 布林值,指示是否應根據 spec 的域對值執行檢查。預設為 CHECK_SPEC_ENCODE 環境變數的值。

Returns:

a np.ndarray.

type_check(value: Union[Tensor, TensorDictBase], selected_keys: Optional[Union[str, Sequence[str]]] = None)

根據 TensorSpec dtype 檢查輸入值 dtype,如果它們不匹配,則引發異常。

參數:
  • value (torch.Tensor) – 要檢查其 dtype 的張量。

  • key (str, optional) – 如果 TensorSpec 具有 keys,則將根據指定 key 指向的 spec 檢查值的 dtype。

unflatten(dim: int, sizes: Tuple[int]) T

取消展平 TensorSpec

有關此方法的更多資訊,請參閱 unflatten()

unlock_(recurse=False)

解鎖 Composite 並允許修改其內容。

除非通過 recurse 參數另行指定,否則這只是第一層的鎖定修改。

unsqueeze(dim: int)

傳回一個新的 Spec,該 Spec 具有多一個 singleton 維度(位於 dim 指示的位置)。

參數:

dim (int or None) – 要應用 unsqueeze 運算的維度。

values(include_nested: bool = False, leaves_only: bool = False, *, is_leaf: Optional[Callable[[type], bool]] = None) _CompositeSpecValuesView

Composite 的值。

參數:
  • include_nested (bool, optional) – 如果 False,傳回的鍵將不會是巢狀的。它們只會代表根的直接子節點,而不是整個巢狀序列,例如 Composite(next=Composite(obs=None)) 將會產生鍵 ["next"]。預設值為 ``False`,也就是說不會傳回巢狀鍵。

  • leaves_only (bool, optional) – 如果 False,傳回的值將包含每個巢狀層級,例如 Composite(next=Composite(obs=None)) 將會產生鍵 ["next", ("next", "obs")]。預設值為 False

Keyword Arguments:

is_leaf (callable, optional) – 讀取類型並傳回一個布林值,指示是否應將該類型視為葉節點。預設情況下,所有非 Composite 節點都會被視為葉節點。

view(*shape) T

重新塑造 TensorSpec

有關此方法的更多資訊,請參閱 reshape()

zero(shape: Optional[Size] = None) TensorDictBase

在範圍內返回一個填滿零的張量。

注意

即使無法保證 0 屬於 spec 域,此方法在違反此條件時也不會引發例外。 zero 的主要用例是生成空的資料緩衝區,而不是有意義的資料。

參數:

shape (torch.Size) – 零張量的形狀

Returns:

在 TensorSpec 範圍內採樣的填滿零的張量。

zeros(shape: Optional[Size] = None) torch.Tensor | tensordict.base.TensorDictBase

代理到 zero()

文件

存取 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並獲得問題解答

檢視資源