OneHotDiscreteTensorSpec¶
- class torchrl.data.OneHotDiscreteTensorSpec(*args, **kwargs)[源代码]¶
Deprecated version of
torchrl.data.OneHot
.- assert_is_in(value: Tensor) None ¶
断言一个张量是否属于该区域(box),否则抛出异常。
- 参数:
value (torch.Tensor) – 要检查的值。
- cardinality() int ¶
规格的基数。
这指的是规格中可能出现的结果的数量。假设复合规格的基数是所有可能结果的笛卡尔积。
- contains(item: torch.Tensor | TensorDictBase) bool ¶
如果值
val
可以由TensorSpec
生成,则返回True
,否则返回False
。See
is_in()
for more information.
- cpu()¶
将 TensorSpec 转换为“cpu”设备。
- cuda(device=None)¶
将 TensorSpec 转换为“cuda”设备。
- device: torch.device | None = None¶
- encode(val: np.ndarray | list | torch.Tensor | TensorDictBase, *, ignore_device: bool = False) torch.Tensor | TensorDictBase ¶
使用指定的规格对值进行编码,并返回相应的张量。
此方法用于返回易于映射到 TorchRL 所需域的值(例如 numpy 数组)的环境。如果值已经是张量,则规格不会更改其值,而是按原样返回。
- 参数:
val (np.ndarray 或 torch.Tensor) – 要编码为张量的值。
- 关键字参数:
ignore_device (bool, 可选) – 如果为
True
,则将忽略规格设备。这用于在调用TensorDict(..., device="cuda")
时将张量转换分组,这样更快速。- 返回:
符合所需张量规格的 torch.Tensor。
- enumerate(use_mask: bool = False) Tensor ¶
返回可以从 TensorSpec 获得的所有样本。
样本将沿第一个维度堆叠。
此方法仅为离散规格实现。
- 参数:
use_mask (bool, 可选) – 如果为
True
且规格有掩码,则排除被掩码的样本。默认为False
。
- erase_memoize_cache() None ¶
清除用于缓存 encode 执行的缓存。
另请参阅
- expand(*shape)¶
返回一个具有扩展形状的新 Spec。
- 参数:
*shape (tuple 或 iterable of int) – Spec 的新形状。必须可广播到当前形状:其长度至少等于当前形状的长度,并且其最后的值也必须兼容;即,只有当当前维度是单例时,它们才能与当前维度不同。
- classmethod implements_for_spec(torch_function: Callable) Callable ¶
为 TensorSpec 注册一个 torch 函数覆盖。
- index(index: Union[int, Tensor, ndarray, slice, list], tensor_to_index: Tensor) Tensor ¶
索引输入张量。
此方法用于索引那些编码一个或多个分类变量的规格(例如,
OneHot
或Categorical
),以便在不关心索引的实际表示的情况下对张量进行索引。- 参数:
index (int, torch.Tensor, slice 或 list) – 张量的索引
tensor_to_index – 要索引的张量
- 返回:
被索引的张量
- 示例
>>> from torchrl.data import OneHot >>> import torch >>> >>> one_hot = OneHot(n=100) >>> categ = one_hot.to_categorical_spec() >>> idx_one_hot = torch.zeros((100,), dtype=torch.bool) >>> idx_one_hot[50] = 1 >>> print(one_hot.index(idx_one_hot, torch.arange(100))) tensor(50) >>> idx_categ = one_hot.to_categorical(idx_one_hot) >>> print(categ.index(idx_categ, torch.arange(100))) tensor(50)
- is_in(val: Tensor) bool ¶
如果值
val
可以由TensorSpec
生成,则返回True
,否则返回False
。更具体地说,
is_in
方法检查值val
是否在space
属性(盒子)定义的限制内,并且dtype
、device
、shape
以及其他可能的元数据是否与规格匹配。如果任何检查失败,is_in
方法将返回False
。- 参数:
val (torch.Tensor) – 要检查的值。
- 返回:
布尔值,指示值是否属于 TensorSpec 区域。
- make_neg_dim(dim: int) T ¶
将特定维度转换为
-1
。
- memoize_encode(mode: bool = True) None ¶
创建 encode 方法的缓存可调用序列,以加快其执行速度。
这应该只在输入类型、形状等在给定规格的调用之间预期一致时使用。
- 参数:
mode (bool, optional) – 是否使用缓存。默认为 True。
另请参阅
缓存可以通过
erase_memoize_cache()
擦除。
- property ndim: int¶
规格形状的维数。
相当于
len(spec.shape)
。
- ndimension() int ¶
规格形状的维数。
相当于
len(spec.shape)
。
- one(shape: torch.Size = None) torch.Tensor | TensorDictBase ¶
返回盒中的一个填充一的张量。
注意
尽管不能保证
1
属于规格域,但当此条件被违反时,此方法不会引发异常。one
的主要用例是生成空的(数据)缓冲区,而不是有意义的数据。- 参数:
shape (torch.Size) – one-tensor 的形状
- 返回:
在 TensorSpec 区域中采样的填充一的张量。
- ones(shape: torch.Size = None) torch.Tensor | TensorDictBase ¶
Proxy to
one()
.
- project(val: torch.Tensor | TensorDictBase) torch.Tensor | TensorDictBase ¶
如果输入张量不在 TensorSpec 区域内,则根据定义的启发式方法将其映射回该区域。
- 参数:
val (torch.Tensor) – 要映射到盒子的张量。
- 返回:
属于 TensorSpec 区域的 torch.Tensor。
- rand(shape: Optional[Size] = None) Tensor ¶
返回规格定义的区域中的随机张量。
采样将在区域内均匀进行,除非区域无界,在这种情况下将绘制正态值。
- 参数:
shape (torch.Size) – 随机张量的形状
- 返回:
在 TensorSpec 区域中采样的随机张量。
- sample(shape: torch.Size = None) torch.Tensor | TensorDictBase ¶
返回规格定义的区域中的随机张量。
See
rand()
for details.
- squeeze(dim=None)¶
返回一个新 Spec,其中所有大小为
1
的维度都已删除。当给定
dim
时,仅在该维度上执行挤压操作。- 参数:
dim (int 或 None) – 应用挤压操作的维度
- to(dest: torch.dtype | DEVICE_TYPING) OneHot ¶
将 TensorSpec 转换为设备或 dtype。
如果未进行更改,则返回相同的规格。
- to_categorical(val: torch.Tensor, safe: bool | None = None) torch.Tensor ¶
将给定的独热张量转换为分类格式。
- 参数:
val (torch.Tensor, 可选) – 要转换为分类格式的 one-hot 张量。
safe (bool) – 布尔值,指示是否应检查值与规格域的匹配程度。默认为
CHECK_SPEC_ENCODE
环境变量的值。
- 返回:
分类张量。
示例
>>> one_hot = OneHot(3, shape=(2, 3)) >>> one_hot_sample = one_hot.rand() >>> one_hot_sample tensor([[False, True, False], [False, True, False]]) >>> categ_sample = one_hot.to_categorical(one_hot_sample) >>> categ_sample tensor([1, 1])
- to_categorical_spec() Categorical ¶
将 spec 转换为等效的分类 spec。
示例
>>> one_hot = OneHot(3, shape=(2, 3)) >>> one_hot.to_categorical_spec() Categorical( shape=torch.Size([2]), space=CategoricalBox(n=3), device=cpu, dtype=torch.int64, domain=discrete)
- to_numpy(val: torch.Tensor, safe: bool | None = None) np.ndarray ¶
返回输入张量的
np.ndarray
对应项。This is intended to be the inverse operation of
encode()
.- 参数:
val (torch.Tensor) – 要转换为 numpy 的张量。
safe (bool) – 布尔值,指示是否应检查值与规格域的匹配程度。默认为
CHECK_SPEC_ENCODE
环境变量的值。
- 返回:
一个 np.ndarray。
- to_one_hot(val: torch.Tensor, safe: bool | None = None) torch.Tensor ¶
No-op for OneHot.
- type_check(value: Tensor, key: Optional[NestedKey] = None) None ¶
检查输入值
dtype
是否与TensorSpec
的dtype
匹配,如果不匹配则引发异常。- 参数:
value (torch.Tensor) – 需要检查 dtype 的张量。
key (str, optional) – 如果 TensorSpec 具有键,则将检查值 dtype 是否与指定键指向的规格匹配。
- unflatten(dim: int, sizes: tuple[int]) T ¶
解展一个
TensorSpec
。有关此方法的更多信息,请查看
unflatten()
。
- unsqueeze(dim: int)¶
返回一个新 Spec,其中在
dim
指定的位置增加了一个单例维度。- 参数:
dim (int 或 None) – 应用 unsqueeze 操作的维度。
- update_mask(mask)¶
设置一个掩码,以防止在采样时出现某些可能的输出。
掩码也可以在 spec 初始化期间设置。
- 参数:
mask (torch.Tensor or None) – boolean mask. If None, the mask is disabled. Otherwise, the shape of the mask must be expandable to the shape of the spec.
False
masks an outcome andTrue
leaves the outcome unmasked. If all the possible outcomes are masked, then an error is raised when a sample is taken.
示例
>>> mask = torch.tensor([True, False, False]) >>> ts = OneHot(3, (2, 3,), dtype=torch.int64, mask=mask) >>> # All but one of the three possible outcomes are masked >>> ts.rand() tensor([[1, 0, 0], [1, 0, 0]])
- zero(shape: torch.Size = None) torch.Tensor | TensorDictBase ¶
返回盒中的零填充张量。
注意
尽管不能保证
0
属于规格域,但当此条件被违反时,此方法不会引发异常。zero
的主要用例是生成空的(数据)缓冲区,而不是有意义的数据。- 参数:
shape (torch.Size) – zero-tensor 的形状
- 返回:
在 TensorSpec 框中采样的零填充张量。
- zeros(shape: torch.Size = None) torch.Tensor | TensorDictBase ¶
Proxy to
zero()
.