请问优化PyTorch模型时如何从torchvision加载ResNet50模型?[阿里云机器学习PAI]

请问优化PyTorch模型时如何从torchvision加载ResNet50模型?

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
2 条回复 A 作者 M 管理员
  1. 您好,由于PAI-Blade仅支持ScriptModule,因此需要转换模型格式,代码如下:

    model = models.resnet50().float().cuda()  # 准备模型。model = torch.jit.script(model).eval()    # 转换成ScriptModule。dummy = torch.rand(1, 3, 224, 224).cuda() # 构造测试数据。

  2. 首先,需要在阿里云上安装PyTorch和torchvision,然后使用以下代码从torchvision加载ResNet50模型:

    from torchvision.models import resnet50model = resnet50(pretrained=True)
  3. 由于与resnet50的分类数不一样,所以在调用时,要使用num_classes=分类数。 如果需要加载模型本身的参数,需要使用pretrained=True。由于最后一层的分类数不一样,所以最后一层的参数数目也就不一样,所以在加载模型参数时要去掉最后一层

    def _resnet(    arch: str,    block: Type[Union[BasicBlock, Bottleneck]],    layers: List[int],    pretrained: bool,    progress: bool,    **kwargs: Any) -> ResNet:    model = ResNet(block, layers, **kwargs)    if pretrained:        state_dict = load_state_dict_from_url(model_urls[arch],                                              progress=progress)                for k in list(state_dict.keys()):  #固定遍历对象            print(k)            if k == "fc.weight" or k == "fc.bias":                state_dict.pop(k)  #删除最后一层的模型参数                         model.load_state_dict(state_dict,strict=False)  #非严格加载模型参数    return model