使用 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")
自动骨干网络
使用 AutoBackbone 可以将预训练模型用作骨干网络,以从骨干网络的不同阶段获取特征图。您应该在 from_pretrained() 中指定以下参数之一
out_indices
是您想要获取特征图的层的索引out_features
是您想要获取特征图的层的名称
这些参数可以互换使用,但如果同时使用两者,请确保它们彼此匹配!如果您不传递任何这些参数,则骨干网络将返回最后一层的特征图。
例如,在上图中,要返回 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")
自动模型
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_tf
和 from_flax
关键字参数在 PyTorch 架构中加载,以规避此问题。
通常,我们建议使用 AutoTokenizer
类和 AutoModelFor
类来加载模型的预训练实例。这将确保您每次都加载正确的架构。在下一个 教程 中,学习如何使用您新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。
最后,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
类来加载模型的预训练实例。这将确保您每次都加载正确的架构。在下一个 教程 中,学习如何使用您新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。