【Transformer-Hugging Face 05/10】 使用 AutoClass 加载预训练实例

news/2024/7/19 11:37:58 标签: transformer, 深度学习, 人工智能

目录

  • 一、说明
  • 二、自动分词器
  • 三、自动图像处理器
  • 四、自动特征提取器
  • 五、自动处理器
  • 六、自动模型
  • 七、在TensorFlow中
  • 八、自动骨干网

一、说明

   由于有如此多不同的 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类来加载模型的预训练实例。这将确保您每次加载正确的架构。在下一个教程中,了解如何使用新加载的分词器、图像处理器、特征提取器和处理器来预处理数据集以进行微调。

七、在TensorFlow中

   最后,这些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]


http://www.niftyadmin.cn/n/5374513.html

相关文章

【Linux进阶之路】网络——“?“(上)

文章目录 一、历史发展1. 独立形态2. 互联形态3. 局域网 二、网络协议1.OSI七层协议2.TCP/IP四(五)层模型 三、网络通信1.封装与解包2.数据的传输1.局域网2.广域网 总结尾序 本篇文章的目的是带大家初步认识网络,为后面的网络编程打下基础&am…

volatile的实现

字节码层面 ACC_VOLATILE JVM volatile内存区的读写都加了内存屏障 OS和硬件层面 windows lock 指令实现

【C++】STL之string 超详解

目录 1.string概述 2.string使用 1.构造初始化 2.成员函数 1.迭代器 2.容量操作 1.size和length 返回字符串长度 2.resize 调整字符串大小 3.capacity 获得字符串容量 4.reserve 调整容量 5.clear 清除 6.empty 判空 3.string插入、追加 、拼接 1.运算…

C++进阶(十四)智能指针

📘北尘_:个人主页 🌎个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上,不忘来时的初心 文章目录 一、为什么需要智能指针?二、内存泄漏1、 什么是内存泄漏,内存泄漏的危…

异步复位同步释放原则

复位信号有一个非常重要的原则,叫作异步复位同步释放原则。异步复位指一个寄存器的复位信号随时可以复位,不必考虑该寄存器的时钟信号正处在哪个相位上。同步释放是指一个寄存器的复位信号从复位态回到释放态的时机,必须与该寄存器的时钟信号…

算法沉淀——模拟(leetcode真题剖析)

算法沉淀——模拟 01.替换所有的问号02.提莫攻击03.Z字形变换04.外观数列05.数青蛙 模拟算法是一种通过模拟问题的描述或场景来解决问题的算法。这种算法的核心思想是按照问题描述的规则,逐步模拟问题的发展过程,从而得到问题的解决方案。通常&#xff0…

文件包含知识点详细总结

如果想看图片和观感更好的话,可以直接去我的github或者gitbook github:https://github.com/kakaandhanhan/cybersecurity_knowledge_book-gitbook.22kaka.fun gitbook:http://22kaka.fun description: 这里将通过参考文章和做题一起进行总结,并且文件包含漏洞,很多都利用了…

操作系统基础:IO核心子系统【下】

🌈个人主页:godspeed_lucip 🔥 系列专栏:OS从基础到进阶 🏆🏆本文完整PDF源文件请翻阅至文章底部下载。🏆🏆 ⚕️1 I/O核心子系统——概述🔱1.1 核心子系统要完成的功能…