Python Pyrotch一维圆形填充
对于卷积,我想在一维中应用循环填充,在所有其他维中应用零填充。我该怎么做 对于卷积,有28个通道,因此数据在球形容器中描述。有20个箱子用于半径乘以20个箱子用于极坐标乘以20个箱子用于倾斜。 圆形衬垫只能用于倾斜 小例子Python Pyrotch一维圆形填充,python,machine-learning,pytorch,torch,Python,Machine Learning,Pytorch,Torch,对于卷积,我想在一维中应用循环填充,在所有其他维中应用零填充。我该怎么做 对于卷积,有28个通道,因此数据在球形容器中描述。有20个箱子用于半径乘以20个箱子用于极坐标乘以20个箱子用于倾斜。 圆形衬垫只能用于倾斜 小例子 #示例: x=火炬张量([[1,2,3], [4,5,6], [7,8,9]]) y=球体_垫(x,垫=(0,1)) #y现在是张量([[3,1,2,3,1], # [6, 4, 5, 6, 4], # [9
#示例:
x=火炬张量([[1,2,3],
[4,5,6],
[7,8,9]])
y=球体_垫(x,垫=(0,1))
#y现在是张量([[3,1,2,3,1],
# [6, 4, 5, 6, 4],
# [9, 7, 8, 9, 7]])
我已经试着申请了
def sphere_pad(x, pad=(1,1)):
return x.repeat(*x.shape)[
(x.shape[0]-pad[0]):(2*x.shape[0]+pad[0]),
(x.shape[1]-pad[1]):(2*x.shape[1]+pad[1])]
然后使用正常的零填充(最后一个维度没有填充)应用卷积。
这适用于一个小示例,但此方法超出了实际问题大小的GPU内存。
还有其他方法吗?使用numpy,您可以执行
环绕
填充,以便阵列沿着第二个轴环绕:
np.pad(x, ((0,0),(1,1)), mode='wrap')
array([[3, 1, 2, 3, 1],
[6, 4, 5, 6, 4],
[9, 7, 8, 9, 7]])
此功能是由添加的。然而,出于某些(奇怪的)原因,圆形填充仅由3D、4D和5D张量支持。如果已经有二维张量,则需要先将其转换为三维,然后再直接在pytorch中执行:
>>> a = torch.randint(0, 9, (1, 3, 3))
>>> a
tensor([[[4, 2, 5],
[2, 2, 8],
[3, 2, 8]]])
>>> F.pad(a, (1, 1), mode='circular')
tensor([[[5, 4, 2, 5, 4],
[8, 2, 2, 8, 2],
[8, 3, 2, 8, 3]]])
谢谢,这在第一层非常有效,但我想知道这是否也可以用于其他层的自动签名?