首页 文章

Pytorch,有效的方式通过其第一个和最后一个元素扩展张量

提问于
浏览
1

我在pytorch中有一个张量 . 我想分别从_88190_位置开始在特定维度上扩展它,分别是该维度的第一个和最后一个元素 .
假设我有数据 [[0, 0, 0], [1, 1, 1], [2, 2, 2]] 的张量 . 操作 extend(dim, k) 会以这种方式改变它:

extend(0, 1) :[ [0, 0, 0], [0, 0, 0] ,[0,0,0],[1,1,1],[2,2,2], [2, 2, 2], [2, 2, 2] ]

extend(1, 1) :[ 0 ,0,0,0, 0 ],[ 1 ,1,1,1, 1 ],[ 2 ,2,2,2, 2 ]]

什么是有效的方法(符合 tensor.requires_grad=true

1 回答

  • 1

    您正在寻找torch.nn.functional.padmode='replicate' .
    但是,要使其工作,您需要注意两件事:

    1. pad 不适用于2D张量 . 因此,您需要在 pad 之前添加前导单例维度,然后再将 squeeze 添加 .
      2.填充值 pad 的预期顺序与暗淡顺序相反 .
    import torch
    from torch.nn inport functional
    x = torch.tensor([[0, 0, 0],[1, 1, 1], [2, 2, 2]], dtype=torch.float)
    # expand along dim=0 by k=2 
    f.pad(x[None,None,...], (0,0, 2, 2), mode='replicate').squeeze()
    

    出[]:
    张量([[0 . ,0.,0 . ],
    [0.,0.,0 . ],
    [0.,0.,0 . ],
    [1.,1.,1 . ],
    [2.,2.,2 . ],
    [2.,2.,2 . ],
    [2.,2.,2 . ]])

    # expand along dim=1 by k=2
    f.pad(x[None,None,...], (2, 2, 0 , 0), mode='replicate').squeeze()
    

    出[]:
    张量([[0,0,0,0,0,0,0,0,0],
    [1.,1.,1.,1.,1.,1.,1 . ],
    [2.,2.,2.,2.,2.,2.,2 . ]])

相关问题