【Pytorch】快速掌握迁移学习:代码示例与指南(使用预训练模型解决图像分类任务)

什么是迁移学习?

迁移学习指的是将一个已经训练好的模型用于其他的问题上。例如,利用在ImageNet(包含数百万张图像)等大数据集中训练出来的模型,将它们用于支持我们FoodVision Mini模型——一个更加细分的食物图片分类任务上,

迁移学习的原理是利用已经在一个问题上学到的知识,来帮助解决另一个相关的问题

它的核心思想是,即使两个问题并不完全相同,它们之间可能存在一些共享的特征或模式。通过将一个问题上学到的知识迁移到另一个问题上,我们可以加速学习过程,提高解决问题的效率。

迁移学习的应用

在这里插入图片描述

计算机视觉

  • 计算机视觉模型可能会在ImageNet的数百万图像中学习模式,然后使用这些模式推断另一个问题。
  • 假设我们已经训练了一个模型来识别汽车的图像。现在我们想要训练一个模型来识别卡车。由于汽车和卡车在视觉上有很多相似之处,我们可以利用已经学到的关于汽车的知识,并将其迁移到卡车识别的问题上,从而更快地训练出一个效果良好的模型。(相同的Tensorflow项目在这篇笔记有记录)

自然语言处理(NLP)

  • 语言模型可能通过阅读整个维基百科来学习语言的结构,然后将该知识应用于不同的问题。
  • 假设我们已经训练了一个模型来进行英文文本的情感分析(判断文本是正面的、负面的还是中性的)。现在我们想要进行中文文本的情感分析。虽然语言不同,但情感分析的基本原理是相似的。因此,我们可以利用英文情感分析模型学到的知识,并将其迁移到中文情感分析的问题上。

医学影像诊断

  • 假设我们已经训练了一个模型来识别X射线图像中的骨折。现在我们想要训练一个模型来识别MRI图像中的肿瘤。尽管这两种图像的特征和信息不同,但在医学影像诊断的领域中,许多基本的图像处理技术和模式识别方法是通用的。因此,我们可以利用X射线图像识别骨折的模型学到的知识,并将其迁移到MRI图像识别肿瘤的问题上。

预训练模型的获取途径

PyTorch

  • 每个PyTorch库(如 torchvision 和 torchtext)都带有某种形式的预训练模型。这些模型可以直接在PyTorch中使用,例如在 torchvision.modelstorchtext.modelstorchaudio.modelstorchrec.models 中可以找到。

HuggingFace Hub

  • 来自全球各个组织的多个领域(视觉、文本、音频等)的预训练模型系列。这个平台上也有许多不同的数据集。详细信息和资源可以访问 HuggingFace 模型HuggingFace 数据集

timm (PyTorch图像模型) 库

  • 该库包含几乎所有最新和最好的计算机视觉模型,以及许多其他有用的计算机视觉特性。它是一个丰富的资源库,适用于PyTorch代码中的计算机视觉任务。更多信息可以在 timm GitHub 页面 找到。

Paperswithcode

  • 这是一个附有代码实现的最新最先进的机器学习论文集合。您可以在这里找到模型在不同任务上的性能基准,详细信息请访问 Paperswithcode

在这里插入图片描述

快速入门迁移学习(代码示例)

下面代码参考自官网教程:Models and pre-trained weights — Torchvision 0.18 documentation

选取一张pizza的图片,并使用预训练模型对其识别,最后打印结果

from torchvision.io import read_image
from torchvision.models import resnet50, ResNet50_Weights

# 读取图片
img = read_image("/content/data/pizza_steak_sushi/test/pizza/1687143.jpg")

# 第一步:初始化模型
example_weights = ResNet50_Weights.DEFAULT #选择默认的预训练权重
example_model = resnet50(weights=example_weights) #使用预训练权重初始化模型
example_model.eval() # 将模型设置为评估模式

# 第二步:初始化预处理变换
preprocess = example_weights.transforms() # 获取与预训练权重相关的预处理变换

# 第三步:应用预处理变换
batch = preprocess(img).unsqueeze(0) # 对图像进行预处理变换,并添加一个新的维度(batch)

# 第四步:使用模型并打印预测的类别
prediction = example_model(batch).squeeze(0).softmax(0) # 对图像进行预测分类
class_id = prediction.argmax().item() # 获取预测概率最高的类别 ID
score = prediction[class_id].item() # 获取预测概率
category_name = example_weights.meta["categories"][class_id] # 获取类别名称
print(f"{category_name}: {100 * score:.1f}%") # 打印结果

结果输出:pizza: 37.6%

这意味着在所有可能的类别中,模型最有信心的是该图像属于 “pizza” 类别,且模型认为图像是 “pizza” 的可能性为 37.6%。虽然 37.6% 不是一个非常高的概率,但在多分类任务中,如果其他类别的概率都低于 37.6%,那么 “pizza” 就是模型的最佳猜测。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值