对Pytorch中的每个通道应用2D卷积内核?

对Pytorch中的每个通道应用2D卷积内核?,pytorch,Pytorch,我有一个大小为[3,3]的二维核和一个大小为[B,64,H,W]的张量 我的问题是,如何将相同的2D内核应用于每个输入通道?我应该重塑/重复内核吗?我尝试按如下方式重复我的内核: kernel = kernel.repeat((B, 64, 1, 1)) 但当我应用它时,张量大小会变为[1,64,H,1]。一种方法是使用分组卷积,每个输入通道一个组 直接使用示例 #假设kernel.shape==[3,3]和x.shape==[B,64,H,W] 权重=内核[None,None,…]。重复(6

我有一个大小为[3,3]的二维核和一个大小为[B,64,H,W]的张量

我的问题是,如何将相同的2D内核应用于每个输入通道?我应该重塑/重复内核吗?我尝试按如下方式重复我的内核:

kernel = kernel.repeat((B, 64, 1, 1))

但当我应用它时,张量大小会变为[1,64,H,1]。

一种方法是使用分组卷积,每个输入通道一个组

直接使用示例

#假设kernel.shape==[3,3]和x.shape==[B,64,H,W]
权重=内核[None,None,…]。重复(64,1,1,1)
y=nn.functional.conv2d(x,权重,组=64)
或使用

conv=nn.Conv2d(64,64,3,组=64,偏差=False)
conv.weight.data=kernel[None,None,…]。重复(64,1,1,1)
y=conv(x)

当然,您也可以通过包含这些参数来指定任何填充、跨步或扩展。

一种方法是使用分组卷积,每个输入通道一组

直接使用示例

#假设kernel.shape==[3,3]和x.shape==[B,64,H,W]
权重=内核[None,None,…]。重复(64,1,1,1)
y=nn.functional.conv2d(x,权重,组=64)
或使用

conv=nn.Conv2d(64,64,3,组=64,偏差=False)
conv.weight.data=kernel[None,None,…]。重复(64,1,1,1)
y=conv(x)
当然,您也可以通过包含这些参数来指定所需的任何填充、跨步或扩展