快捷方式

LazyStackedCompositeSpec

class torchrl.data.LazyStackedCompositeSpec(*args, **kwargs)[來源]

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

assert_is_in(value: Tensor) None

斷言張量是否屬於這個盒,否則引發例外。

參數:

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

clear_device_()

清除 Composite 的裝置。

clone() T

建立 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 裝置。所有 leaves 必須擁有非空的裝置。

empty()

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

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

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

此方法用於環境回傳一個可以輕易映射到 TorchRL 所需領域的值(例如,numpy array)的情況。如果該值已經是一個 tensor,spec 將不會變更它的值,並直接回傳它。

參數:

val (np.ndarraytorch.Tensor) – 要編碼為 tensor 的值。

Keyword Arguments:

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

Returns:

符合所需 tensor specs 的 torch.Tensor。

expand(*shape)

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

參數:

*shape (tupleint 的 iterable) – Spec 的新形狀。必須與目前的形狀可廣播:它的長度必須至少與目前的形狀長度一樣長,並且它的最後的值也必須一致;也就是說,它們只有在目前的維度是 singleton 時才能與之不同。

flatten(start_dim: int, end_dim: int) T

展平一個 TensorSpec

請查看 flatten() 以獲取關於此方法的更多資訊。

get(item, default=_NoDefault.ZERO)

從 Composite 中取得一個 item。

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

classmethod implements_for_spec(torch_function: Callable) Callable

為 TensorSpec 註冊一個 torch function override。

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

索引輸入的 tensor。

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

  • tensor_to_index – 要被索引的 tensor

Returns:

被索引的 tensor

is_empty()

判斷 composite spec 是否包含 specs。

is_in(value) 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,回傳的鍵將不會是巢狀的。它們將只代表 root 的直接子節點,而不是整個巢狀序列,也就是說,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) – 讀取類型並回傳布林值,指示該類型是否應被視為 leaf。預設情況下,所有非 Composite 節點都會被視為 leaf。

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

Composite 的鍵。

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

參數:
  • include_nested (bool, optional) – 如果 False,回傳的鍵將不會是巢狀的。它們將只代表 root 的直接子節點,而不是整個巢狀序列,也就是說,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) – 讀取類型並回傳布林值,指示該類型是否應被視為 leaf。預設情況下,所有非 Composite 節點都會被視為 leaf。

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)

將特定維度轉換為 -1

property ndim

規格形狀的維度數量。

len(spec.shape) 的捷徑。

ndimension()

規格形狀的維度數量。

len(spec.shape) 的捷徑。

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

傳回框中填滿 1 的張量。

注意

即使不能保證 1 屬於規格域,但此方法在違反此條件時不會引發例外。 one 的主要用例是產生空的資料緩衝區,而不是有意義的資料。

參數:

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

Returns:

在 TensorSpec 框中取樣的填滿 1 的張量。

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

Proxy to one().

project(val: TensorDictBase) TensorDictBase

如果輸入張量不在 TensorSpec 框中,它會根據一些已定義的啟發式方法將其映射回框中。

參數:

val (torch.Tensor) – 要映射到框中的張量。

Returns:

屬於 TensorSpec 框的 torch.Tensor。

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

傳回由規格定義的空間中的隨機張量。

除非該框是無界的,在這種情況下將繪製常態值,否則將在空間上均勻地完成取樣。

參數:

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

Returns:

在 TensorSpec 框中取樣的隨機張量。

reshape(*shape) T

重新塑形 TensorSpec

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

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

傳回由規格定義的空間中的隨機張量。

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

squeeze(dim: Optional[int] = None)

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

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

參數:

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

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

將 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:

一個 np.ndarray。

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

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

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

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

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

TensorSpec 還原扁平化。

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

unlock_(recurse=False)

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

除非透過 recurse arg 另行指定,否則這僅是第一層級鎖定修改。

unsqueeze(dim: int)

傳回一個新的 Spec,其具有一個以上的單例維度(位於 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,回傳的鍵將不會是巢狀的。它們將只代表 root 的直接子節點,而不是整個巢狀序列,也就是說,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) – 讀取類型並回傳布林值,指示該類型是否應被視為 leaf。預設情況下,所有非 Composite 節點都會被視為 leaf。

view(*shape) T

重新塑形 TensorSpec

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

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

傳回一個在 box 內填滿零的 tensor。

注意

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

參數:

shape (torch.Size) – 零 tensor 的形狀

Returns:

一個在 TensorSpec box 中取樣,填滿零的 tensor。

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

Proxy 至 zero()

文件

Access comprehensive developer documentation for PyTorch

View Docs

Tutorials

Get in-depth tutorials for beginners and advanced developers

View Tutorials

Resources

Find development resources and get your questions answered

View Resources