我在 pytorch 中有一个张量。我想在特定维度上从头到尾分别使用该维度的第一个和最后一个元素将其扩展 k
个位置。
假设我有一个带有数据 [[0, 0, 0], [1, 1, 1], [2, 2, 2]]
的张量。操作 extend(dim, k)
会以这种方式更改它:
扩展(0, 1)
: [[0, 0, 0], [0, 0, 0], [0, 0, 0], [ 1, 1, 1], [2, 2, 2], [2, 2, 2], [2, 2, 2]]
扩展(1, 1)
: [0, 0, 0, 0, 0], [1强>, 1, 1, 1, 1], [2, 2, 2, 2, 2]]
什么是有效的方法来做到这一点(符合tensor.requires_grad=true
)
最佳答案
您正在寻找torch.nn.functional.pad
,使用 mode='replicate'
。
但是,要使其正常工作,您需要注意两件事:
1. pad
不适用于 2D 张量。因此,您需要在 pad
之前添加前导单例尺寸,然后squeeze
它们。
2. pad 值 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()
Out[]: tensor([[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()
Out[]: tensor([[0., 0., 0., 0., 0., 0., 0.], [1., 1., 1., 1., 1., 1., 1.], [2., 2., 2., 2., 2., 2., 2.]])
关于python - Pytorch,通过第一个和最后一个元素扩展张量的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53688217/