【问题标题】:Concatenating two tensors with different dimensions in Pytorch在 Pytorch 中连接两个不同维度的张量
【发布时间】:2018-10-29 15:41:00
【问题描述】:

是否可以在不使用 for 循环的情况下连接两个不同维度的张量。

例如张量 1 的尺寸为 (15, 200, 2048),张量 2 的尺寸为 (1, 200, 2048)。是否可以沿第一张量中第一维的所有 15 个索引将第二张量与第一张量连接(沿张量 1 的第一维广播第二张量,同时沿第一张量的第三维连接)?生成的张量应该有尺寸 (15, 200, 4096)。

没有for循环是否可以做到这一点?

【问题讨论】:

    标签: python pytorch


    【解决方案1】:

    您可以在连接之前手动进行广播(使用Tensor.expand())(使用torch.cat()):

    import torch
    
    a = torch.randn(15, 200, 2048)
    b = torch.randn(1, 200, 2048)
    
    repeat_vals = [a.shape[0] // b.shape[0]] + [-1] * (len(b.shape) - 1)
    # or directly repeat_vals = (15, -1, -1) or (15, 200, 2048) if shapes are known and fixed...
    res = torch.cat((a, b.expand(*repeat_vals)), dim=-1)
    print(res.shape)
    # torch.Size([15, 200, 4096])
    

    【讨论】:

    • Tensor.expand()Tensor.repeat() 有什么区别?是不是expand 不分配新内存,而repeat 呢?由于我们将以不同的方式操作扩展的维度,repeat 是否会更好,因为它会预先分配内存?
    猜你喜欢
    • 2022-01-22
    • 2021-12-09
    • 2021-12-01
    • 2020-08-27
    • 2022-01-12
    • 2017-09-22
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    相关资源
    最近更新 更多