当 top = False 时,ResNet50 keras 给出错误形状的输出
ResNet50 keras giving wrong shaped output when top = False
对于迁移学习,我使用 ResNet50 作为特征提取器。通过设置 top = False,我从最后一层之前的层获取输出。作为 ResNet50 的文档,输出的大小应为 (#examples, 7, 7, 2048)
。但是我遇到了一个奇怪的问题。我得到 (#examples, 8, 8, 2048)
的输出形状。以下是代码:
model = ResNet50(weights="imagenet", include_top=False)
# batchImages is a list containing images in that batch
# bs is the batch size
features = model.predict(batchImages, batch_size = bs)
这里特征的形状应该是 (#examples, 7, 7, 2048)
但它给出了 (#examples, 8, 8, 2048)
。为什么会这样?
我发现 ResNet50 中的输出特征大小(top = False)取决于图像的输入形状。虽然在文档中我发现在这种情况下输出特征形状是 (#examples, 7, 7, 2048)
但是当我改变输入图像形状时它会改变。尽管我在任何地方都没有找到任何对此的澄清。但是正如我所看到的,每当我使用大小为 (224 x 224)
的图像时,它都可以正常工作。但是当我将输入图像的大小增加到 (255 x 255)
时,输出特征向量大小变为 (#examples, 8, 8, 2048)
。这看起来很奇怪,但实际上这正在发生。
这是绝对正常的,ResNet 中的大小减小是由每个块后大小为 2x2 的 MaxPooling 给出的。由于 Resnet 中有 5 个块,因此您将始终得到 input_size / 2**5。
224 / 32 = 7
256 / 32 = 8
对于迁移学习,我使用 ResNet50 作为特征提取器。通过设置 top = False,我从最后一层之前的层获取输出。作为 ResNet50 的文档,输出的大小应为 (#examples, 7, 7, 2048)
。但是我遇到了一个奇怪的问题。我得到 (#examples, 8, 8, 2048)
的输出形状。以下是代码:
model = ResNet50(weights="imagenet", include_top=False)
# batchImages is a list containing images in that batch
# bs is the batch size
features = model.predict(batchImages, batch_size = bs)
这里特征的形状应该是 (#examples, 7, 7, 2048)
但它给出了 (#examples, 8, 8, 2048)
。为什么会这样?
我发现 ResNet50 中的输出特征大小(top = False)取决于图像的输入形状。虽然在文档中我发现在这种情况下输出特征形状是 (#examples, 7, 7, 2048)
但是当我改变输入图像形状时它会改变。尽管我在任何地方都没有找到任何对此的澄清。但是正如我所看到的,每当我使用大小为 (224 x 224)
的图像时,它都可以正常工作。但是当我将输入图像的大小增加到 (255 x 255)
时,输出特征向量大小变为 (#examples, 8, 8, 2048)
。这看起来很奇怪,但实际上这正在发生。
这是绝对正常的,ResNet 中的大小减小是由每个块后大小为 2x2 的 MaxPooling 给出的。由于 Resnet 中有 5 个块,因此您将始终得到 input_size / 2**5。 224 / 32 = 7 256 / 32 = 8