Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyrotch一维圆形填充_Python_Machine Learning_Pytorch_Torch - Fatal编程技术网

Python Pyrotch一维圆形填充

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

对于卷积,我想在一维中应用循环填充,在所有其他维中应用零填充。我该怎么做

对于卷积,有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, 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]]])

谢谢,这在第一层非常有效,但我想知道这是否也可以用于其他层的自动签名?