由于有如此多不同的 Transformer 架构,为您的检查点创建一个架构可能具有挑战性。作为 Transformers 核心理念的一部分,使库易于、简单且灵活地使用,它会AutoClass从给定的检查点自动推断并加载正确的架构。该from_pretrained()方法可让您快速加载任何架构的预训练模型,因此您无需投入时间和资源从头开始训练模型。生成这种类型的与检查点无关的代码意味着,如果您的代码适用于一个检查点,那么它将适用于另一个检查点 - 只要它经过针对类似任务的训练 - 即使架构不同。
请记住,架构是指模型的骨架,检查点是给定架构的权重。比如BERT是一个架构,而BERTbert-base-uncased是一个检查点。模型是一个通用术语,可以表示架构或检查点。
在本教程中,您将学习:
几乎每个 NLP 任务都以分词器开始。分词器将您的输入转换为模型可以处理的格式。
使用AutoTokenizer.from_pretrained()加载分词器:
from transformers import AutoTokenizer
tokenizer = AutoTokenizer.from_pretrained("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")
对于音频任务,特征提取器以正确的输入格式处理音频信号。
使用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-base-uncased")
轻松重用相同的检查点来加载不同任务的架构:
from transformers import AutoModelForTokenClassification
model = AutoModelForTokenClassification.from_pretrained("distilbert-base-uncased")
对于 PyTorch 模型,该from_pretrained()方法使用torch.load()内部使用的方法pickle,并且已知是不安全的。一般来说,切勿加载可能来自不受信任来源或可能已被篡改的模型。对于 Hugging Face Hub 上托管的公共模型来说,这种安全风险得到了部分缓解,这些模型在每次提交时都会扫描恶意软件。请参阅Hub 文档了解最佳实践,例如使用 GPG进行签名提交验证。
TensorFlow 和 Flax 检查点不受影响,并且可以使用 from_pretrained 方法的 from_tf 和 from_flax kwargs 在 PyTorch 架构中加载,以避免此问题。
TensorFlow 和 Flax 检查点不受影响,并且可以使用from_tf和from_flaxkwargs加载到 PyTorch 架构中来from_pretrained规避此问题。
一般来说,我们建议使用AutoTokenizer类和AutoModelFor类来加载模型的预训练实例。这将确保您每次加载正确的架构。在下一个教程中,了解如何使用新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。
最后,这些TFAutoModelFor类允许您加载给定任务的预训练模型(有关可用任务的完整列表,请参阅此处)。例如,使用 T F A u t o M o d e l F o r S e q u e n c e C l a s s i f i c a t i o n . f r o m p r e t r a i n e d ( ) TFAutoModelForSequenceClassification.from_pretrained() TFAutoModelForSequenceClassification.frompretrained()
加载序列分类模型:
from transformers import TFAutoModelForSequenceClassification
model = TFAutoModelForSequenceClassification.from_pretrained("distilbert-base-uncased")
轻松重用相同的检查点来加载不同任务的架构:
from transformers import TFAutoModelForTokenClassification
model = TFAutoModelForTokenClassification.from_pretrained("distilbert-base-uncased")
一般来说,我们建议使用AutoTokenizer类和TFAutoModelFor类来加载模型的预训练实例。这将确保您每次加载正确的架构。在下一个教程中,了解如何使用新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。
AutoBackbone允许您使用预训练模型作为主干,并获取特征图作为模型不同阶段的输出。下面您可以看到如何从Swin检查点获取特征图。
使用管道运行推
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=(0,))
inputs = processor(image, return_tensors="pt")
outputs = model(**inputs)
feature_maps = outputs.feature_maps
list(feature_maps[-1].shape)
[1, 96, 56, 56]