【问题标题】:How can I check the image sizes while CNN?CNN 时如何检查图像大小?
【发布时间】:2020-07-30 07:07:49
【问题描述】:

我正在尝试使用 PyTorch 对 CNN 中的猫和狗进行分类。 虽然我做了一些图层和处理图像,但我发现最终处理的特征图大小与计算的大小不匹配。 因此,我尝试在 CNN 过程中使用打印形状逐步检查特征图大小,但它不起作用。 我听说 tensorflow 可以分步检查张量大小,但我该怎么做呢?

我想要的是:

        def __init__(self):
        super(CNN, self).__init__()
        conv1 = nn.Conv2d(1, 16, 3, 1, 1)
        conv1_1 = nn.Conv2d(16, 16, 3, 1, 1)
        pool1 = nn.MaxPool2d(2)
        conv2 = nn.Conv2d(16, 32, 3, 1, 1)
        conv2_1 = nn.Conv2d(32, 32, 3, 1, 1)
        pool2 = nn.MaxPool2d(2)
        conv3 = nn.Conv2d(32, 64, 3, 1, 1)
        conv3_1 = nn.Conv2d(64, 64, 3, 1, 1)
        conv3_2 = nn.Conv2d(64, 64, 3, 1, 1)
        pool3 = nn.MaxPool2d(2)

        self.conv_module = nn.Sequential(
            conv1,
            nn.ReLU(),
            conv1_1,
            nn.ReLU(),
            pool1,
            # check first result size
            conv2,
            nn.ReLU(),
            conv2_1,
            nn.ReLU(),
            pool2,
            # check second result size
            conv3,
            nn.ReLU(),
            conv3_1,
            nn.ReLU(),
            conv3_2,
            nn.ReLU(),
            pool3,
            # check third result size
            pool4,
            # check fourth result size
            pool5
            # check fifth result size
        )

如果有任何其他方法可以在每一步检查特征大小,请提供一些建议。 提前致谢。

【问题讨论】:

  • model.summary() 是否可以帮助您可视化模型的层?
  • @RandomGuy 感谢您的帮助,但它不适用于自定义网络也许我应该做一些功能?
  • 您的模型似乎并不难,您可以尝试创建具有相同层和参数的通用 Keras 模型并应用 model.summary()。它实际上可能比自定义函数更快、更容易阅读
  • @RandomGuy 你明白了。我应该改用 Tensorflow。

标签: python pytorch conv-neural-network


【解决方案1】:

为此,您不应使用nn.Sequential。只需在 __init__() 中初始化您的层,然后在 forward 函数中调用它们。在 forward 函数中,您可以打印出形状。比如这样:

class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        
        self.conv1 = nn.Conv2d(...)
        self.maxpool1 = nn.MaxPool2d()

        self.conv2 = nn.Conv2d(...)
        self.maxpool2 = nn.MaxPool2d()
    
    def forward(self, x):
        x = self.conv1(x)
        x = F.relu(x)
        x = self.maxpool1(x)
        print(x.size())

        x = self.conv2(x)
        x = F.relu(x)
        x = self.maxpool2(x)
        print(x.size())

希望这就是你想要的!

【讨论】:

  • 工作得很好谢谢!我应该这样考虑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-22
  • 2014-01-20
  • 2012-05-16
  • 2015-05-26
  • 1970-01-01
相关资源
最近更新 更多