【发布时间】:2021-04-26 22:16:01
【问题描述】:
我想在 pytorch 中制作一个 CNN 模型,它可以输入不同大小的图像。我正在尝试使用 2d 卷积层,它采用 4D 输入形状(pytorch 的 Conv2d 期望其 2D 输入实际上具有 4 个维度)。 但是,我不确定如何设置可以将所有可变大小的图像调整为固定数量的特征图以传递给剩余层的输入层。 例如,彩色图像的输入形状是 [4, 3, 32, 32],它对应于批量大小、通道数(RGB)、宽度和高度。如果图像是灰度的,那么它将具有 [4, 1, 32, 32],当形状不是图层预期的形状时会产生错误。
错误消息是“RuntimeError: Given groups=1, weight of size [6, 3, 5, 5], expected input[4, 1, 32, 32] 有 3 个通道,但有 1 个通道”
我目前的 CNN 架构如下。
def __init__(self, num_out, kernel_size, num_input_filters):
super().__init__()
self.num_input_filters = num_input_filters
self.num_out = num_out
self.kernel_size = kernel_size
self.conv1 = nn.Conv2d(3, 6, 5)
self.pool = nn.MaxPool2d(2, 2)
def forward(self, inp):
inp = self.pool(F.relu(self.conv1(inp)))
return inp
我参考了类似的问题,完全卷积网络 (FCN) 对输入大小完全没有限制,这可能是解决方案。而pytorch为FCN提供了ConvTranspose2d(),但它的参数似乎仍然需要固定的输入大小。 有什么方法可以解决这个问题吗?
【问题讨论】:
标签: python pytorch conv-neural-network