我最近从 TensorFlow 切换到 PyTorch。我使用著名的 Github repo 来训练 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
的官方输入大小是 456x456,但我使用了 512x512 甚至 256x256 并得到了非常不错的结果。这是正常的吗?或者我错过了作者会为你调整到原始分辨率的源代码?
PS:这似乎是我在 Kaggle 上看到的所有 PyTorch 教程中的常态。我的完整代码可以在此处的 notebook 中查看;我喜欢不留下逻辑空白,因此出现了这个问题。
答案 0 :(得分:1)
是的,在迁移学习方面,您可以使用不同的输入大小,毕竟您加载的模型只是固定层序列和固定卷积核大小的一组权重。但我相信模型需要某种最小尺寸才能有效工作。您仍然需要重新训练模型,但它仍然会很快收敛。
您必须检查模型最小尺寸的官方实现,例如 VGG16 中的模型,其中指定宽度和高度至少需要为 32
。