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

标签 python pytorch

我在 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/

相关文章:

python - 如何使用列中每个唯一元素的第一次出现对数据框进行排序?

python - python错误中的小数对象

python-3.x - Spacy相似警告: "Evaluating Doc.similarity based on empty vectors."

deep-learning - PyTorch 在第一个可用的 GPU 上分配更多内存(cuda :0)

python - Python中将Json Dict对象转换为DataFrame

python - Python中如何获取线程执行时间

python - PyTorch模型验证: The size of tensor a (32) must match the size of tensor b (13)

pytorch - 如何在 Pytorch Lightning 中禁用进度条

python - 类型错误 : unsupported format string passed to Tensor. __format__

python - 尝试在 pyOpenGL 中绘制一个简单的正方形