捷徑

StackedComposite

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

複合規格堆疊的延遲表示。

沿一個維度將複合規格堆疊在一起。當繪製隨機樣本時,將傳回 LazyStackedTensorDict。

允許索引,但僅沿堆疊維度。

此類別旨在用於多任務和多代理設定,其中可能發生異構規格(語義相同但形狀不同)。

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 spec 可以有 None 裝置。所有 leaves 必須有非空的裝置。

empty()[source]

建立一個類似 self 的 spec,但沒有任何條目。

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

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

此方法用於回傳值(例如,一個 numpy 陣列)的環境,該值可以輕易地對應到 TorchRL 需要的 domain。如果該值已經是一個 tensor,spec 將不會更改其值,並將其原樣傳回。

參數:

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

Keyword Arguments:

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

Returns:

符合所需 tensor spec 的 torch.Tensor。

expand(*shape)[source]

傳回具有擴展形狀的新 Spec。

參數:

*shape (tuple or iterable of int) – 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 的覆寫。

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, slice or list) – 張量的索引

  • tensor_to_index – 要建立索引的張量

Returns:

已建立索引的張量

is_empty()

判斷 composite spec 是否包含任何 specs。

is_in(value) bool[source]

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

更精確地說,is_in 方法會檢查數值 val 是否在 space 屬性(該 box)所定義的範圍內,以及 dtypedeviceshape,以及其他潛在的中繼資料是否與該 spec 相符。如果這些檢查有任何一項失敗,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[source]

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) – 讀取一個類型,並回傳布林值,表示是否應將該類型視為葉節點。預設情況下,所有非 Composite 節點都會被視為葉節點。

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

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) – 讀取一個類型,並回傳布林值,表示是否應將該類型視為葉節點。預設情況下,所有非 Composite 節點都會被視為葉節點。

lock_(recurse=False)

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

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

Leaf specs 始終可以在原地修改,但不能在其 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

Spec 形狀的維度數量。

len(spec.shape) 的捷徑。

ndimension()[source]

Spec 形狀的維度數量。

len(spec.shape) 的捷徑。

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

在 box 中返回一個填充 1 的張量。

注意

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

參數:

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

Returns:

一個在 TensorSpec box 中採樣的填充 1 的張量。

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

Proxy to one().

project(val: TensorDictBase) TensorDictBase[source]

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

參數:

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

Returns:

一個屬於 TensorSpec box 的 torch.Tensor。

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

在 spec 定義的空間中返回一個隨機張量。

採樣將在空間上均勻地完成,除非該 box 是無界的,在這種情況下將繪製正規值。

參數:

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

Returns:

一個在 TensorSpec box 中採樣的隨機張量。

reshape(*shape) T

重塑一個 TensorSpec

有關此方法的更多信息,請查看 reshape()

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

在 spec 定義的空間中返回一個隨機張量。

詳情請參閱 rand()

squeeze(dim: Optional[int] = None)

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

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

參數:

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

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

將 TensorSpec 轉換為 device 或 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 具有 keys,則會針對指示的 key 所指向的 spec 檢查 value dtype。

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

取消扁平化 TensorSpec

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

unlock_(recurse=False)

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

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

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) – 讀取一個類型,並回傳布林值,表示是否應將該類型視為葉節點。預設情況下,所有非 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

Proxy 至 zero()

文件

取得 PyTorch 的完整開發者文件

檢視文件

教學課程

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

檢視教學課程

資源

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

檢視資源