PyTorch深度学习框架进阶——预训练模型

喜欢花科技君 2025-03-08 02:22:02

PyTorch 提供了许多预训练模型,这些模型已经在大型数据集上训练过,可以用于各种任务,如图像分类、目标检测、自然语言处理等。

PyTorch 预训练模型及其获取和使用方法Torchvision

torchvision 是 PyTorch 的一个库,提供了许多用于计算机视觉任务的预训练模型。

常用模型:

ResNet: 残差网络,常用于图像分类。AlexNet: 经典的卷积神经网络。VGG: 深度卷积神经网络。Inception: 谷歌开发的深度卷积神经网络。SqueezeNet: 轻量级卷积神经网络。DenseNet: 密集连接的网络结构。

加载预训练模型

PyTorch 的 torchvision.models 模块提供了许多经典的预训练模型,如 ResNet、VGG、AlexNet 等。

import torchvision.models as models# 加载预训练的 ResNet-18 模型resnet18 = models.resnet18(pretrained=True)# 加载预训练的 VGG-16 模型vgg16 = models.vgg16(pretrained=True)# 加载预训练的 AlexNet 模型alexnet = models.alexnet(pretrained=True)

修改预训练模型

预训练模型通常用于迁移学习。你可以修改模型的最后一层,以适应你的任务。

import torch.nn as nn# 修改 ResNet-18 的最后一层,使其适应 10 类分类任务resnet18.fc = nn.Linear(resnet18.fc.in_features, 10)# 修改 VGG-16 的最后一层,使其适应 10 类分类任务vgg16.classifier[6] = nn.Linear(vgg16.classifier[6].in_features, 10)

冻结模型参数

在迁移学习中,通常会冻结预训练模型的参数,只训练新添加的层。

# 冻结 ResNet-18 的所有参数for param in resnet18.parameters(): param.requires_grad = False# 只训练最后一层resnet18.fc.requires_grad = True

使用预训练模型进行推理

加载预训练模型后,你可以直接使用它进行推理。

from torchvision import transformsfrom PIL import Image# 加载图像并进行预处理image = Image.open('image.jpg')preprocess = transforms.Compose([ transforms.Resize(256), transforms.CenterCrop(224), transforms.ToTensor(), transforms.Normalize(mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225]),])input_tensor = preprocess(image)input_batch = input_tensor.unsqueeze(0) # 添加 batch 维度# 使用 ResNet-18 进行推理resnet18.eval() # 设置为评估模式with torch.no_grad(): output = resnet18(input_batch)# 输出结果print(output)Hugging Face Transformers

transformers 库由 Hugging Face 开发,提供了大量的预训练模型,涵盖自然语言处理(NLP)任务,如文本分类、命名实体识别、问答系统、文本生成等。

常用模型:

BERT: 双向编码器表示模型。GPT: 生成预训练 Transformer模型。RoBERTa: 改进版的 BERT。DistilBERT: BERT 的轻量级版本。T5: 文本到文本的 Transformer 模型。from transformers import pipeline# 使用预训练的问答模型nlp = pipeline("question-answering")context = "PyTorch 是一个开源的深度学习框架。"question = "PyTorch 是什么?"result = nlp(question=question, context=context)print(f"Answer: {result['answer']}, score: {result['score']}")Torch Hub

torch.hub 提供了一个简单的接口,用于加载来自 GitHub 仓库的预训练模型。

import torch# 加载预训练的 YOLOv5 模型model = torch.hub.load('ultralytics/yolov5', 'yolov5s', pretrained=True)# 进行目标检测img = 'https://github.com/ultralytics/yolov5/raw/master/data/images/zidane.jpg'results = model(img)# 显示结果results.print()results.show()常见的预训练模型ResNet: resnet18, resnet34, resnet50, resnet101, resnet152VGG: vgg11, vgg13, vgg16, vgg19AlexNet: alexnetSqueezeNet: squeezenet1_0, squeezenet1_1DenseNet: densenet121, densenet169, densenet201, densenet161Inception: inception_v3GoogLeNet: googlenetMobileNet: mobilenet_v2ShuffleNet: shufflenet_v2_x0_5, shufflenet_v2_x1_0

0 阅读:0

喜欢花科技君

简介:感谢大家的关注