【问题标题】:How to insert values of one tensor into another?如何将一个张量的值插入另一个张量?
【发布时间】:2021-08-22 05:48:26
【问题描述】:

我正在尝试将张量 y 插入到张量 x 最终维度 (y_dim) 中。最终张量的大小应为 (100, 16, 16, 1),其中 y 的值放置在 100 x 0 维度中的每个维度中

import torch

y_dim = 1
x = torch.randn(100, 16, 16, y_dim)
#OR x = torch.randn(100, 16, 16)
y = torch.randn(100)

Xy = torch.cat((x, y), dim=3)

【问题讨论】:

    标签: python pytorch


    【解决方案1】:

    我认为您在理解张量和维度方面遗漏了一些东西。最简单的方法是将您的张量 x 视为包含 100 宽度和高度映射 16 的批处理, 100 16x16-maps。因此,您正在操作一个包含 100*16*16 元素的张量。另一方面,您的 y 包含 100 标量值,它具有 100 元素。

    我把问题转给你:

    您将如何连接 100 16x16-maps 和 100 标量值?


    以上问题没有答案。不过,有些事情可以做,可以对y 进行假设以执行连接:

    • 如果你有一个张量 y 也包含 16x16 映射,那么是的,这个操作是可以实现的:

      >>> x = torch.rand(100, 16, 16)
      >>> y = torch.rand(100, 16, 16)
      
      >>> torch.cat((x, y)).shape
      torch.Size([200, 16, 16])
      
    • 如果您考虑问题中的y,您可以将100 标量值扩展为16x16 映射。并且,然后与x 连接:

      >>> x = torch.rand(100, 16, 16)
      >>> y = torch.rand(100)
      
      >>> y_r = y[:,  None, None].repeat(1, 16, 16)
      >>> torch.cat((x, y_r))
      torch.Size([200, 16, 16])
      

    【讨论】:

    • 我明白了,我想做的是用 100x1 个标签从 y 拟合 100 个 16 宽和 16 高的地图
    • 是的,我知道这是您的问题。然而这根本无法做到,你明白为什么吗?如果需要,我可以提供更多解释。
    • 我想我明白了?是不是因为添加另一个维度会将每个 WidthHeight 样本变成 WidthHeightDepth?这意味着标签将重复 16x16 次?
    • 确实对应于我的第二个要点,其中 y 值重复 16x16 次。
    猜你喜欢
    • 2019-04-25
    • 1970-01-01
    • 2022-01-21
    • 2020-08-01
    • 2019-12-12
    • 1970-01-01
    • 2022-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多