你可以在迁移学习期间使用不同的图像尺寸吗?
Can you use a different image size during transfer learning?
我最近从 TensorFlow 切换到了 PyTorch。我使用著名的 Github repo 在 EfficientNets
上进行训练。我写的模型初始化class如下:
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)
来训练某些图像 class 化任务(主要是 Kaggle 竞赛)。所以这里的问题是,EfficientNetB5
的官方输入大小是 456x456,但我使用了 512x512 甚至 256x256 并获得了非常不错的结果。这是正常的吗?还是我错过了作者会为您调整为原始分辨率的源代码?
PS:这似乎是我在 Kaggle 上看到的所有 PyTorch 教程中的常态。我的完整代码可以在 notebook 这里看到;我喜欢不留逻辑空白,因此弹出了这个问题。
是的,在迁移学习方面,您可以使用不同的输入大小,毕竟您加载的模型只是固定层序列和固定卷积核大小的一组权重。但我相信模型需要某种最小尺寸才能有效工作。您仍然需要重新训练模型,但它仍然会很快收敛。
您必须检查关于模型最小尺寸的官方实现,例如 VGG16 中的那个,他们指定宽度和高度至少需要 32
。
我最近从 TensorFlow 切换到了 PyTorch。我使用著名的 Github repo 在 EfficientNets
上进行训练。我写的模型初始化class如下:
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)
来训练某些图像 class 化任务(主要是 Kaggle 竞赛)。所以这里的问题是,EfficientNetB5
的官方输入大小是 456x456,但我使用了 512x512 甚至 256x256 并获得了非常不错的结果。这是正常的吗?还是我错过了作者会为您调整为原始分辨率的源代码?
PS:这似乎是我在 Kaggle 上看到的所有 PyTorch 教程中的常态。我的完整代码可以在 notebook 这里看到;我喜欢不留逻辑空白,因此弹出了这个问题。
是的,在迁移学习方面,您可以使用不同的输入大小,毕竟您加载的模型只是固定层序列和固定卷积核大小的一组权重。但我相信模型需要某种最小尺寸才能有效工作。您仍然需要重新训练模型,但它仍然会很快收敛。
您必须检查关于模型最小尺寸的官方实现,例如 VGG16 中的那个,他们指定宽度和高度至少需要 32
。