Transformers 文档

使用 AutoClass 加载预训练实例

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

使用 AutoClass 加载预训练实例

面对如此众多的 Transformer 架构,为您的检查点创建一个架构可能具有挑战性。作为 🤗 Transformers 核心理念的一部分,为了使库易于使用、简单且灵活,AutoClass 会自动推断并加载给定检查点的正确架构。from_pretrained() 方法允许您快速加载任何架构的预训练模型,因此您无需花费时间和资源从头开始训练模型。生成这种检查点无关的代码意味着,如果您的代码适用于一个检查点,它将适用于另一个检查点 - 只要它是在类似的任务上训练的 - 即使架构不同。

请记住,架构指的是模型的骨架,检查点是给定架构的权重。例如,BERT 是一种架构,而 google-bert/bert-base-uncased 是一个检查点。模型是一个通用术语,可以指架构或检查点。

在本教程中,学习如何

  • 加载预训练的分词器。
  • 加载预训练的图像处理器
  • 加载预训练的特征提取器。
  • 加载预训练的处理器。
  • 加载预训练的模型。
  • 加载模型作为骨干网络。

自动分词器

几乎每个 NLP 任务都从分词器开始。分词器将您的输入转换为模型可以处理的格式。

使用 AutoTokenizer.from_pretrained() 加载分词器。

>>> from transformers import AutoTokenizer

>>> tokenizer = AutoTokenizer.from_pretrained("google-bert/bert-base-uncased")

然后按如下所示对您的输入进行分词

>>> sequence = "In a hole in the ground there lived a hobbit."
>>> print(tokenizer(sequence))
{'input_ids': [101, 1999, 1037, 4920, 1999, 1996, 2598, 2045, 2973, 1037, 7570, 10322, 4183, 1012, 102], 
 'token_type_ids': [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0], 
 'attention_mask': [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]}

自动图像处理器

对于视觉任务,图像处理器会将图像处理成正确的输入格式。

>>> from transformers import AutoImageProcessor

>>> image_processor = AutoImageProcessor.from_pretrained("google/vit-base-patch16-224")

自动骨干网络

一个具有多个阶段的 Swin 骨干网络,用于输出特征图。

使用 AutoBackbone 可以将预训练模型用作骨干网络,以从骨干网络的不同阶段获取特征图。您应该在 from_pretrained() 中指定以下参数之一

  • out_indices 是您想要获取特征图的层的索引
  • out_features 是您想要获取特征图的层的名称

这些参数可以互换使用,但如果同时使用两者,请确保它们彼此匹配!如果您不传递任何这些参数,则骨干网络将返回最后一层的特征图。

来自骨干网络第一阶段的特征图。补丁划分指的是模型的 stem 部分。

例如,在上图中,要返回 Swin 骨干网络第一阶段的特征图,可以设置 out_indices=(1,)

>>> from transformers import AutoImageProcessor, AutoBackbone
>>> import torch
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
>>> model = AutoBackbone.from_pretrained("microsoft/swin-tiny-patch4-window7-224", out_indices=(1,))

>>> inputs = processor(image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> feature_maps = outputs.feature_maps

现在您可以访问骨干网络第一阶段的 feature_maps 对象

>>> list(feature_maps[0].shape)
[1, 96, 56, 56]

自动特征提取器

对于音频任务,特征提取器会将音频信号处理成正确的输入格式。

使用 AutoFeatureExtractor.from_pretrained() 加载特征提取器。

>>> from transformers import AutoFeatureExtractor

>>> feature_extractor = AutoFeatureExtractor.from_pretrained(
...     "ehcalabres/wav2vec2-lg-xlsr-en-speech-emotion-recognition"
... )

自动处理器

多模态任务需要一个处理器来组合两种类型的预处理工具。例如,LayoutLMV2 模型需要一个图像处理器来处理图像,以及一个分词器来处理文本;处理器将两者结合起来。

使用 AutoProcessor.from_pretrained() 加载处理器。

>>> from transformers import AutoProcessor

>>> processor = AutoProcessor.from_pretrained("microsoft/layoutlmv2-base-uncased")

自动模型

Pytorch
隐藏 Pytorch 内容

AutoModelFor 类允许您为给定任务加载预训练模型(有关可用任务的完整列表,请参见 此处)。例如,使用 AutoModelForSequenceClassification.from_pretrained() 加载用于序列分类的模型。

>>> from transformers import AutoModelForSequenceClassification

>>> model = AutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")

轻松重用相同的检查点以加载用于不同任务的架构

>>> from transformers import AutoModelForTokenClassification

>>> model = AutoModelForTokenClassification.from_pretrained("distilbert/distilbert-base-uncased")

对于 PyTorch 模型,from_pretrained() 方法使用 torch.load(),该方法内部使用 pickle,并且已知是不安全的。通常,切勿加载可能来自不受信任的来源或可能被篡改的模型。对于托管在 Hugging Face Hub 上的公共模型,此安全风险会得到部分缓解,这些模型在每次提交时都会 扫描恶意软件。有关最佳实践(如使用 GPG 进行 签名提交验证)的信息,请参见 Hub 文档

TensorFlow 和 Flax 检查点不受影响,并且可以使用 from_pretrained 方法的 from_tffrom_flax 关键字参数在 PyTorch 架构中加载,以规避此问题。

通常,我们建议使用 AutoTokenizer 类和 AutoModelFor 类来加载模型的预训练实例。这将确保您每次都加载正确的架构。在下一个 教程 中,学习如何使用您新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。

TensorFlow
隐藏 TensorFlow 内容

最后,TFAutoModelFor 类允许您为给定任务加载预训练模型(有关可用任务的完整列表,请参见 此处)。例如,使用 TFAutoModelForSequenceClassification.from_pretrained() 加载用于序列分类的模型。

>>> from transformers import TFAutoModelForSequenceClassification

>>> model = TFAutoModelForSequenceClassification.from_pretrained("distilbert/distilbert-base-uncased")

轻松重用相同的检查点以加载用于不同任务的架构

>>> from transformers import TFAutoModelForTokenClassification

>>> model = TFAutoModelForTokenClassification.from_pretrained("distilbert/distilbert-base-uncased")

通常,我们建议使用 AutoTokenizer 类和 TFAutoModelFor 类来加载模型的预训练实例。这将确保您每次都加载正确的架构。在下一个 教程 中,学习如何使用您新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。

< > 在 GitHub 上更新