pytorch CNN 关心图像大小吗?

问题描述 投票:0回答:1

我这些天正在玩 CNN,我有如下粘贴的代码。我的问题是,这适用于任何图像尺寸吗?我不清楚什么参数或通道(如果有的话)关心图像大小?如果是这样的话,模型如何知道它需要多少个神经元,这不是图像大小的函数吗?

预训练模型的相关点 - 如果我使用预训练模型,我是否需要重新格式化我的图像,使其与模型最初训练的内容相同,或者它是如何工作的?

class CNN(nn.Module):
    def __init__(self, num_classes, num_channels=1):
        super(CNN, self).__init__()
        self.num_classes = num_classes
        self.conv1 = nn.Conv2d(num_channels, 32, kernel_size=3, padding=1)
        self.relu1 = nn.ReLU()
        self.pool1 = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(32, 64, kernel_size=3, padding=1)
        self.relu2 = nn.ReLU()
        self.pool2 = nn.MaxPool2d(kernel_size=2, stride=2)
        self.fc = nn.Linear(64*7*7, num_classes)
python machine-learning deep-learning pytorch conv-neural-network
1个回答
0
投票
  1. 不可以,但是

    Conv2D()
    层可以处理可变的图像尺寸。
    Conv2D()
    层的工作方式是在每组 kernel_size x kernel_size 像素上应用内核。填充也会添加到卷积之前的维度。因此,只要填充后图像尺寸至少为 kernel_size x kernel_size,卷积就会起作用。在本例中,kernel_size 为 3,padding 为 1,因此即使单个像素也可以工作,因为在 padding 后,图像将是 3x3。该 CNN 无法采用可变图像尺寸的原因是由于线性层的原因。线性层需要两次最大池化后的 7x7 图像,因此需要 28x28 图像开始。

  2. 这取决于层的类型,线性层接受一组输入大小和一组输出大小,这决定了参数(神经元)的数量。卷积层的参数数量由内核大小和输出通道数决定,因此它不依赖于输入大小。

  3. 这取决于模型,某些模型即使在特定分辨率上进行训练,也允许可变的图像尺寸。

© www.soinside.com 2019 - 2024. All rights reserved.