Python 为了从头开始训练pytorch模型,我需要更改哪些参数?
我按照本教程培训了一个pytorch模型,用于实例分割: 我不想在完全不同的数据和类别上训练一个模型,这与COCO完全无关。我需要做哪些更改来重新培训模型。根据我的阅读,我猜除了有正确数量的课程外,我只需要训练这一行:Python 为了从头开始训练pytorch模型,我需要更改哪些参数?,python,deep-learning,pytorch,Python,Deep Learning,Pytorch,我按照本教程培训了一个pytorch模型,用于实例分割: 我不想在完全不同的数据和类别上训练一个模型,这与COCO完全无关。我需要做哪些更改来重新培训模型。根据我的阅读,我猜除了有正确数量的课程外,我只需要训练这一行: model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True) 到 但是我注意到还有另外一个参数:pretrained\u backbone=True,trainiable\u backb
model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=True)
到
但是我注意到还有另外一个参数:
pretrained\u backbone=True,trainiable\u backbone\u layers=None
它们是否也应该更改?来自maskrcnn\u resnet50\u fpn
:
- 预培训(bool)-如果为真,则返回在COCO train2017上预培训的模型
- 预训练主干(bool)–如果为真,则返回在Imagenet上预训练主干的模型
- 可训练主干层(int)–从最终块开始的可训练(非冻结)resnet层的数量。有效值介于0和5之间,5表示所有主干层都是可训练的
model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, trainable_backbone_layers=5, num_classes=your_num_classes)
或:
因为在源代码中:
函数签名是
torchvision.models.detection.maskrcnn\u resnet50\u fpn(预训练=假,进度=真,数量=91,预训练主干=真,可训练主干层=3,**kwargs)
设置pretrained=False
将告诉PyTorch不要下载在COCO train2017上预先培训过的车型。你想要它,因为你对训练感兴趣
通常,如果您想在不同的数据集上进行训练,这就足够了
当您设置pretrained=False
时,PyTorch将在ImageNet上下载pretrained ResNet50。默认情况下,它将冻结名为conv1
和layer1
的前两个块。这是如何在更快的R-CNN论文中完成的,该论文对预训练主干的初始层进行了冻结
(只需打印模型以检查其结构)
现在,如果您甚至不想冻结前两层,您可以设置可训练的主干\u层=5
(在设置预训练的主干=False
时自动完成),这将从头开始训练整个resnet主干
检查
model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, trainable_backbone_layers=5, num_classes=your_num_classes)
model = torchvision.models.detection.maskrcnn_resnet50_fpn(pretrained=False, pretrained_backbone=False, num_classes=your_num_classes)
if not (pretrained or pretrained_backbone):
trainable_backbone_layers = 5
layers_to_train = ['layer4', 'layer3', 'layer2', 'layer1', 'conv1'][:trainable_layers]