【问题标题】:Kernel size can't be greater than actual input size内核大小不能大于实际输入大小
【发布时间】:2023-03-17 05:46:01
【问题描述】:

我有一个深度 = 3 的数据,我想通过 3 个卷积层传递它,每个卷积层有 3x3x3 个内核。 我当前的代码如下。第一个输入是 [batch_size=10, in_channels=1, depth=3, height=128, width=256] 我注意到在第一个 conv3d 层之后输出是 [10,8,1,126,254]。显然它现在有深度 1 并且不接受另一个 3x3x3 层。我怎样才能做到这一点?

class CNet(nn.Module):
    def __init__(self, **kwargs):
        super().__init__()
        self.conv1 = nn.Conv3d(1, 8, kernel_size=3, stride=1, padding=0)
        self.conv2 = nn.Conv3d(8, 16, kernel_size=3, stride=1, padding=0)
        self.conv3 = nn.Conv3d(16, 32, kernel_size=3, stride=1, padding=0)
        self.fc1 = nn.Linear(value, 2)

    def forward(self, X):
        X = F.relu(self.conv1(X))
        X = F.relu(self.conv2(X))
        X = F.max_pool2d(X,2)
        X = self.conv3(X)
        X = F.max_pool2d(X,2)
        X = self.fc1(X)
        return F.softmax(X,dim =1)

【问题讨论】:

    标签: python deep-learning pytorch conv-neural-network


    【解决方案1】:

    您需要使用填充。如果您只想在第一个之后并且仅在深度维度中填充卷积的输入以获得最小维度 3,您将使用padding=(1, 0, 0)(它是 1,因为相同的填充应用于两侧,即 (padding, input, padding) 沿着那个维度)。

    self.conv2 = nn.Conv3d(8, 16, kernel_size=3, stride=1, padding=(1, 0, 0))
    self.conv3 = nn.Conv3d(16, 32, kernel_size=3, stride=1, padding=(1, 0, 0))
    

    但是,在使用kernel_size=3 时,通常将padding=1 用于所有维度,因为这样可以保持维度不变,从而更容易构建更深的网络,因为您无需担心大小突然变得太小了,因为它已经发生在你的深度维度上。此外,当不使用填充时,角点仅包含在单个计算中,而所有其他元素都有助于多次计算。建议对所有卷积使用kernel_size=3padding=1

    self.conv1 = nn.Conv3d(1, 8, kernel_size=3, stride=1, padding=1)
    self.conv2 = nn.Conv3d(8, 16, kernel_size=3, stride=1, padding=1)
    self.conv3 = nn.Conv3d(16, 32, kernel_size=3, stride=1, padding=1)
    

    【讨论】:

    • 感谢您提供如此清晰透彻的解释。我的任务指定我不使用填充。我假设这是不可能的?
    • 你是对的,这是不可能的,除非你一开始就可以将深度维度变大,否则很可能是填充,所以你不妨让卷积处理填充。另一种方法是复制输入,即您只需在深度维度上重复多次,但坦率地说,这听起来很可疑。
    • 现在我想了想,你确定要使用 3D 卷积吗?稍后您将使用 2D 最大池化。而且您的输入看起来很像 RGB 图像[3, 128, 256] = [channels (RGB), height, width],如果它应该是图像,您应该使用Conv2d
    猜你喜欢
    • 2022-08-22
    • 2015-10-16
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多