我最近从TensorFlow转到了PyTorch。我使用一个著名的Github仓库来训练EfficientNets
。我编写的模型初始化类如下所示:
class CustomEfficientNet(nn.Module): def __init__(self, config: type, pretrained: bool=True): super().__init__() self.config = config self.model = geffnet.create_model( model_name='EfficientNetB5', pretrained=pretrained) n_features = self.model.classifier.in_features self.model.classifier = nn.Linear(n_features, num_classes=5) def forward(self, input_neurons): output_predictions = self.model(input_neurons) return output_predictions
此外,在我的transforms
中,我倾向于使用Resize(img_size = 512, img_size=512)
来处理某些图像分类任务的训练(主要是Kaggle竞赛)。所以这里的问题是,EfficientNetB5
的官方输入尺寸是456×456,但我使用了512×512甚至256×256,并且取得了非常不错的结果。这是正常的吗?还是我错过了作者会为你调整到原生分辨率的源代码部分?
附注:这似乎是我在Kaggle上看到的所有PyTorch教程中的常态。我的完整代码可以在这里查看笔记本;我喜欢不留下逻辑漏洞,因此这个问题就出现了。
回答:
是的,在进行迁移学习时,你可以使用不同的输入尺寸,归根结底,你加载的模型只是固定层序列和固定卷积核尺寸的权重集合。但我认为模型需要一个最小的尺寸才能高效工作。你仍然需要重新训练模型,但它仍然会很快收敛。
你需要检查官方实现中关于模型最小尺寸的说明,比如在VGG16中,他们规定宽度和高度至少需要32
。