ray.rllib.utils.numpy.flatten_inputs_to_1d_tensor#

ray.rllib.utils.numpy.flatten_inputs_to_1d_tensor(inputs: numpy.array | jnp.ndarray | tf.Tensor | torch.Tensor | dict | tuple, spaces_struct: gymnasium.spaces.Space | dict | tuple | None = None, time_axis: bool = False, batch_axis: bool = True) numpy.array | jnp.ndarray | tf.Tensor | torch.Tensor[源代码]#

根据给定的空间结构,展平任意输入结构。

返回一个由不同输入组件的值组成的单个一维张量。

因此: - 盒子(任何形状)被展平为 (B, [T]?, -1)。注意,图像盒子与其他类型的盒子没有区别,也会被展平。 - 离散(整数)值被独热编码,例如,一批 [1, 0, 3] (B=3 且离散空间为 4) 的结果是 [[0, 1, 0, 0], [1, 0, 0, 0], [0, 0, 0, 1]]。 - 多离散值被多独热编码,例如,一批 [[0, 2], [1, 4]] (B=2 且多离散空间为 [2, 5]) 的结果是 [[1, 0, 0, 0, 1, 0, 0], [0, 1, 0, 0, 0, 0, 1]]。

参数:
  • inputs – 要展平的输入。

  • spaces_structinputs 所属的(可能是嵌套的)空间结构。

  • time_axis – 所有输入是否都有一个时间轴(在批次轴之后)。如果为True,不仅会保留批次轴(第0个),还会保留时间轴(第1个)不变,并将从第2个轴开始的所有内容展平。

  • batch_axis – 所有输入是否都有一个批次轴。如果为True,将保持该批次轴不变,并将其余维度展平。

返回:

一个由所有扁平化/独热编码输入组件连接而成的单个一维张量。根据 time_axis 标志,形状为 (B, n) 或 (B, T, n)。

# B=2
from ray.rllib.utils.tf_utils import flatten_inputs_to_1d_tensor
from gymnasium.spaces import Discrete, Box
out = flatten_inputs_to_1d_tensor(
    {"a": [1, 0], "b": [[[0.0], [0.1]], [1.0], [1.1]]},
    spaces_struct=dict(a=Discrete(2), b=Box(shape=(2, 1)))
)
print(out)

# B=2; T=2
out = flatten_inputs_to_1d_tensor(
    ([[1, 0], [0, 1]],
     [[[0.0, 0.1], [1.0, 1.1]], [[2.0, 2.1], [3.0, 3.1]]]),
    spaces_struct=tuple([Discrete(2), Box(shape=(2, ))]),
    time_axis=True
)
print(out)
[[0.0, 1.0,  0.0, 0.1], [1.0, 0.0,  1.0, 1.1]]  # B=2 n=4
[[[0.0, 1.0, 0.0, 0.1], [1.0, 0.0, 1.0, 1.1]],
[[1.0, 0.0, 2.0, 2.1], [0.0, 1.0, 3.0, 3.1]]]  # B=2 T=2 n=4