Transformers 文档

使用AutoClass加载预训练实例

使用 AutoClass 加载预训练实例

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

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

在本教程中,学习:

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

AutoTokenizer

几乎每个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]}

AutoImageProcessor

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

>>> from transformers import AutoImageProcessor

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

AutoBackbone

A Swin backbone with multiple stages for outputting a feature map.

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

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

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

A feature map from the first stage of the backbone. The patch partition refers to the model 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

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

使用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")

AutoModel

Pytorch
Hide Pytorch content

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

默认情况下,权重以全精度(torch.float32)加载,无论权重实际存储的数据类型是什么,例如torch.float16。设置torch_dtype="auto"以加载模型config.json文件中定义的数据类型,以自动加载最节省内存的数据类型。

>>> from transformers import AutoModelForSequenceClassification

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

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

>>> from transformers import AutoModelForTokenClassification

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

对于PyTorch模型,from_pretrained()方法使用torch.load(),该方法内部使用pickle,已知是不安全的。一般来说,永远不要加载可能来自不可信来源的模型,或者可能被篡改的模型。对于托管在Hugging Face Hub上的公共模型,这种安全风险部分得到了缓解,这些模型在每次提交时都会扫描恶意软件。请参阅Hub文档以了解最佳实践,例如使用GPG进行签名提交验证

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

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

TensorFlow
Hide TensorFlow content

最后,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类来加载预训练的模型实例。这将确保每次都能加载正确的架构。在接下来的教程中,学习如何使用新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。

< > Update on GitHub