Deep learning 连接Pytork上的googlenet分支(不同尺寸)

Deep learning 连接Pytork上的googlenet分支(不同尺寸),deep-learning,computer-vision,pytorch,conv-neural-network,Deep Learning,Computer Vision,Pytorch,Conv Neural Network,有没有什么方法可以连接一个小inception(谷歌网)的不同维度的分支 例如,在32 x 32 x 3图像(torch.Size([1,3,32,32])上,它将通过具有以下分支的初始模块: 具有(32个通道,1 x 1个滤波器)的卷积 另一个卷积(32个通道,3个x3滤波器) 合并(沿通道维度连接) 然而问题是,由于这两种卷积,焊炬的尺寸是不同的。 (32通道,1 x 1滤波器)->[1,32,30,30] (32个通道,3个x3滤波器)->[1,32,28,28] 如何连接这两个分支

有没有什么方法可以连接一个小inception(谷歌网)的不同维度的分支

例如,在32 x 32 x 3图像(torch.Size([1,3,32,32])上,它将通过具有以下分支的初始模块:

  • 具有(32个通道,1 x 1个滤波器)的卷积
  • 另一个卷积(32个通道,3个x3滤波器)
  • 合并(沿通道维度连接)

然而问题是,由于这两种卷积,焊炬的尺寸是不同的。 (32通道,1 x 1滤波器)->[1,32,30,30] (32个通道,3个x3滤波器)->[1,32,28,28]

如何连接这两个分支? 我应该加衬垫吗?我试过ZeroPad2d。它不起作用了

供参考:

class Inception(nn.Module):
def __init__(self, in_channel, ch1, ch3):
    super(Inception, self).__init__()
    self.branch1 = nn.Sequential(
        ConvBlock(in_channel, ch1, kernel_size = 1,stride=1, padding=0)
    )
    
    self.branch2 = nn.Sequential(
        ConvBlock(in_channel, ch3, kernel_size = 3,stride=1, padding=0)
    )
    
def forward(self, x):
    branch1 = self.branch1(x)
    branch2 = self.branch2(x)
    return torch.cat([branch1, branch2], 1) *(error here)*

您需要匹配内核大小和填充

对于
kernel\u size=1
不需要填充,但是对于
kernel\u size=3
您需要填充为1:

self.branch2=nn.Sequential(
ConvBlock(在通道中,ch3,内核大小=3,步幅=1,填充=1)
)

有关更多详细信息,请参阅。

您需要匹配内核大小和填充

对于
kernel\u size=1
不需要填充,但是对于
kernel\u size=3
您需要填充为1:

self.branch2=nn.Sequential(
ConvBlock(在通道中,ch3,内核大小=3,步幅=1,填充=1)
)

有关更多详细信息,请参阅。

到目前为止效果良好。谢谢,到目前为止,你做得很好。谢谢你的更新,我已经找到了解决方案。您必须计算正确的填充值。因为这个卷积块的步长为1,所以填充正好是(kernel_size-1)/2。如果我没有弄错的话,这相当于在keras中填充class='same'。作为这里的更新,我已经找到了解决方案。您必须计算正确的填充值。因为这个卷积块的步长为1,所以填充正好是(kernel_size-1)/2。如果我没弄错的话,这相当于在keras中填充class='same'。