【问题标题】:Treat a tuple/list of Tensors as a single Tensor将张量的元组/列表视为单个张量
【发布时间】:2019-05-29 01:04:00
【问题描述】:

我将 Pytorch 用于一些机器人强化学习任务。我想使用有关状态的图像和信息作为此任务的观察结果。我正在使用的实现不直接支持这一点,所以我正在做一些修改。预期的观察结果要么是状态,作为 1 维张量,要么是图像作为 3 维张量(通道、宽度、高度)。在我的任务中,我希望观察是张量的元组。

在我的代码库中的许多地方,观察当然是单个张量,而不是张量的元组。 有没有一种简单的方法可以将张量的元组视为单个张量?

例如,我想:

observation.to(device)

observation 是单个张量时正常工作,并在observation 是张量元组时在每个张量上调用.to(device)

创建可以支持这一点的数据类型应该足够简单,但我想知道这样的数据类型是否已经存在?到目前为止我还没有找到任何东西。

【问题讨论】:

    标签: pytorch


    【解决方案1】:

    如果您的张量大小都相同,您可以使用torch.stack 将它们连接成一个多维的张量。

    例子:

    >>> import torch
    >>> a=torch.randn(2,1)
    >>> b=torch.randn(2,1)
    >>> c=torch.randn(2,1)
    >>> a
    tensor([[ 0.7691],
            [-0.0297]])
    >>> b
    tensor([[ 0.4844],
            [-0.9142]])
    >>> c
    tensor([[ 0.0210],
            [-1.1543]])
    >>> torch.stack((a,b,c))
    tensor([[[ 0.7691],
             [-0.0297]],
    
            [[ 0.4844],
             [-0.9142]],
    
            [[ 0.0210],
             [-1.1543]]])
    

    然后你可以使用torch.unbind 去另一个方向。

    【讨论】:

    • 它们的大小不同。第一个是 1 维的,第三个是 3 维的。在我的特定示例中,形状是 (7,) 和 (3, 128, 128)。
    猜你喜欢
    • 1970-01-01
    • 2020-08-05
    • 2016-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-02-15
    • 2019-07-29
    • 1970-01-01
    相关资源
    最近更新 更多