Transformers 文档
DeiT
并获得增强的文档体验
开始使用
该模型于 2020 年 12 月 23 日发布在 HF 论文中,并于 2021 年 4 月 13 日贡献给 Hugging Face Transformers。
DeiT
概述
DeiT 模型由 Hugo Touvron、Matthieu Cord、Matthijs Douze、Francisco Massa、Alexandre Sablayrolles 和 Hervé Jégou 在论文《Training data-efficient image transformers & distillation through attention》中提出。在 Dosovitskiy et al., 2020 中引入的视觉 Transformer (ViT) 表明,使用 Transformer 编码器(类似于 BERT)可以匹配甚至超越现有的卷积神经网络。然而,该论文中介绍的 ViT 模型需要使用外部数据在昂贵的基础设施上进行数周的训练。DeiT(数据高效图像 Transformer)是一种用于图像分类的、训练效率更高的 Transformer,与原始 ViT 模型相比,它需要更少的数据和更少的计算资源。
论文摘要如下:
最近,纯基于注意力机制的神经网络已被证明可以处理诸如图像分类等图像理解任务。然而,这些视觉 Transformer 通常使用昂贵的基础设施对数以亿计的图像进行预训练,这限制了它们的普及。在这项工作中,我们仅通过在 ImageNet 上进行训练,就构建了一个具有竞争力的无卷积 Transformer。我们在单台计算机上用不到 3 天的时间就完成了训练。我们的参考视觉 Transformer(86M 参数)在 ImageNet 上实现了 83.1% 的 top-1 准确率(单裁剪评估),且没有使用任何外部数据。更重要的是,我们引入了一种专门针对 Transformer 的师生策略。它依赖于一个蒸馏令牌(distillation token),确保学生模型通过注意力机制从教师模型中学习。我们展示了这种基于令牌的蒸馏的优势,特别是在使用卷积神经网络作为教师模型时。这使得我们在 ImageNet(我们获得了高达 85.2% 的准确率)以及迁移到其他任务时,都能报告出与卷积神经网络相媲美的结果。我们分享了代码和模型。
此模型由 nielsr 贡献。
使用技巧
- 与 ViT 相比,DeiT 模型使用所谓的“蒸馏令牌”来有效地从教师模型(在 DeiT 论文中,教师是一个类似 ResNet 的模型)中学习。蒸馏令牌通过自注意力层与分类令牌 ([CLS]) 和补丁令牌(patch tokens)进行交互,从而通过反向传播进行学习。
- 微调蒸馏模型有两种方式,要么 (1) 采用经典方式,仅在分类令牌的最终隐藏状态之上放置一个预测头,而不使用蒸馏信号;要么 (2) 在分类令牌和蒸馏令牌之上都放置一个预测头。在这种情况下,[CLS] 预测头使用预测头输出与地面真值标签之间的常规交叉熵进行训练,而蒸馏预测头使用硬蒸馏(蒸馏预测头的输出与教师模型预测的标签之间的交叉熵)进行训练。在推理时,采用两个头的平均预测作为最终预测。(2) 也被称为“带蒸馏的微调”,因为它依赖于已经在下游数据集上微调过的教师模型。在模型方面,(1) 对应 DeiTForImageClassification,而 (2) 对应 DeiTForImageClassificationWithTeacher。
- 请注意,作者确实也尝试过 (2) 的软蒸馏(在这种情况下,蒸馏预测头使用 KL 散度来匹配教师模型的 softmax 输出),但硬蒸馏获得了最好的结果。
- 所有发布的检查点仅在 ImageNet-1k 上进行了预训练和微调,未使用外部数据。这与原始的 ViT 模型形成了鲜明对比,后者使用 JFT-300M 数据集/ImageNet-21k 等外部数据进行预训练。
- DeiT 的作者还发布了训练效率更高的 ViT 模型,您可以直接将其插入 ViTModel 或 ViTForImageClassification。为了模拟在更大数据集上的训练(同时仅使用 ImageNet-1k 进行预训练),使用了数据增强、优化和正则化等技术。目前有 4 种变体(三种不同尺寸):facebook/deit-tiny-patch16-224、facebook/deit-small-patch16-224、facebook/deit-base-patch16-224 和 facebook/deit-base-patch16-384。请注意,为了准备模型所需的图像,应使用 DeiTImageProcessor。
使用缩放点积注意力 (SDPA)
PyTorch 在 torch.nn.functional 中包含一个原生的缩放点积注意力 (SDPA) 算子。此函数包含几个实现,具体取决于输入和使用的硬件。有关更多信息,请参阅官方文档或GPU 推理页面。
当实现可用时,SDPA 默认用于 `torch>=2.1.1`,但你也可以在 `from_pretrained()` 中设置 `attn_implementation="sdpa"` 来明确请求使用 SDPA。
from transformers import DeiTForImageClassification
model = DeiTForImageClassification.from_pretrained("facebook/deit-base-distilled-patch16-224", attn_implementation="sdpa", device_map="auto")
...为了获得最佳加速效果,我们建议以半精度(例如 `torch.float16` 或 `torch.bfloat16`)加载模型。
在本地基准测试(A100-40GB,PyTorch 2.3.0,操作系统 Ubuntu 22.04)中,使用 float32 和 facebook/deit-base-distilled-patch16-224 模型,我们观察到了以下推理加速效果。
| 批次大小 | 平均推理时间(毫秒),eager 模式 | 平均推理时间(毫秒),sdpa 模型 | 加速,Sdpa / Eager (x) |
|---|---|---|---|
| 1 | 8 | 6 | 1.33 |
| 2 | 9 | 6 | 1.5 |
| 4 | 9 | 6 | 1.5 |
| 8 | 8 | 6 | 1.33 |
资源
以下是官方 Hugging Face 和社区(用 🌎 表示)资源列表,旨在帮助您快速上手 DeiT。
- DeiTForImageClassification 支持此示例脚本和笔记本。
- 另请参阅:图像分类任务指南
除此之外
如果您有兴趣在此处提交资源,请随时开启 Pull Request,我们将对其进行审查!该资源最好能展示一些新内容,而不是重复现有资源。
DeiTConfig
class transformers.DeiTConfig
< source >( transformers_version: str | None = None architectures: list[str] | None = None output_hidden_states: bool | None = False return_dict: bool | None = True dtype: typing.Union[str, ForwardRef('torch.dtype'), NoneType] = None chunk_size_feed_forward: int = 0 is_encoder_decoder: bool = False id2label: dict[int, str] | dict[str, str] | None = None label2id: dict[str, int] | dict[str, str] | None = None problem_type: typing.Optional[typing.Literal['regression', 'single_label_classification', 'multi_label_classification']] = None hidden_size: int = 768 num_hidden_layers: int = 12 num_attention_heads: int = 12 intermediate_size: int = 3072 hidden_act: str = 'gelu' hidden_dropout_prob: float | int = 0.0 attention_probs_dropout_prob: float | int = 0.0 initializer_range: float = 0.02 layer_norm_eps: float = 1e-12 image_size: int | list[int] | tuple[int, int] = 224 patch_size: int | list[int] | tuple[int, int] = 16 num_channels: int = 3 qkv_bias: bool = True encoder_stride: int = 16 pooler_output_size: int | None = None pooler_act: str = 'tanh' )
参数
- hidden_size (
int, 可选, 默认为768) — 隐藏层表示的维度。 - num_hidden_layers (
int, 可选, 默认为12) — Transformer 解码器中的隐藏层数量。 - num_attention_heads (
int, 可选, 默认为12) — Transformer 解码器中每个注意力层的注意力头数量。 - intermediate_size (
int, 可选, 默认为3072) — MLP 表示的维度。 - hidden_act (
str, 可选, 默认为"gelu") — 解码器中的非线性激活函数(函数或字符串)。例如:"gelu","relu","silu"等。 - hidden_dropout_prob (
Union[float, int], 可选, 默认为0.0) — 嵌入层、编码器和池化层中所有全连接层的丢弃概率。 - attention_probs_dropout_prob (
Union[float, int], 可选, 默认为0.0) — 注意力概率的丢弃比率。 - initializer_range (
float, 可选, 默认为0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float, 可选, 默认为1e-12) — 层归一化层使用的 epsilon 值。 - image_size (
Union[int, list[int], tuple[int, int]], 可选, 默认为224) — 每张图像的大小(分辨率)。 - patch_size (
Union[int, list[int], tuple[int, int]], 可选, 默认为16) — 每个补丁的大小(分辨率)。 - num_channels (
int, 可选, 默认为3) — 输入通道的数量。 - qkv_bias (
bool, 可选, 默认为True) — 是否为查询(queries)、键(keys)和值(values)添加偏置。 - encoder_stride (
int, 可选, 默认为 16) — 用于遮蔽图像建模的解码器头中增加空间分辨率的因子。 - pooler_output_size (
int, 可选) — 池化层的维度。如果为 None,则默认为hidden_size。 - pooler_act (
str, 可选, 默认为"tanh") — 池化层使用的激活函数。
这是存储 DeiTModel 配置的配置类。它用于根据指定的参数实例化一个 DeiT 模型,从而定义模型架构。使用默认值实例化配置将产生与 facebook/deit-base-distilled-patch16-224 相似的配置。
配置对象继承自 PreTrainedConfig,可用于控制模型输出。阅读 PreTrainedConfig 的文档以获取更多信息。
示例
>>> from transformers import DeiTConfig, DeiTModel
>>> # Initializing a DeiT deit-base-distilled-patch16-224 style configuration
>>> configuration = DeiTConfig()
>>> # Initializing a model (with random weights) from the deit-base-distilled-patch16-224 style configuration
>>> model = DeiTModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.configDeiTImageProcessor
class transformers.DeiTImageProcessor
< source >( **kwargs: typing_extensions.Unpack[transformers.processing_utils.ImagesKwargs] )
参数
- **kwargs (ImagesKwargs, 可选) — 额外的图像预处理选项。模型特定的 kwargs 列在上面;有关支持参数的完整列表,请参阅 TypedDict 类。
构建一个 DeiTImageProcessor 图像处理器。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] *args **kwargs: typing_extensions.Unpack[transformers.processing_utils.ImagesKwargs] ) → ~image_processing_base.BatchFeature
参数
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]) — 要预处理的图像。期望单个图像或一批图像,其像素值范围从 0 到 255。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False。 - return_tensors (
str或 TensorType, 可选) — 如果设置为'pt',则返回堆叠的张量,否则返回张量列表。 - **kwargs (ImagesKwargs, 可选) — 额外的图像预处理选项。模型特定的 kwargs 列在上面;有关支持参数的完整列表,请参阅 TypedDict 类。
返回
~image_processing_base.BatchFeature
- data (
dict) — 由 call 方法返回的列表/数组/张量字典(“pixel_values”等)。 - tensor_type (
Union[None, str, TensorType], optional) — 您可以在此处提供 tensor_type 以在初始化时将整数列表转换为 PyTorch/Numpy 张量。
DeiTImageProcessorPil
class transformers.DeiTImageProcessorPil
< source >( **kwargs: typing_extensions.Unpack[transformers.processing_utils.ImagesKwargs] )
参数
- **kwargs (ImagesKwargs, 可选) — 额外的图像预处理选项。模型特定的 kwargs 列在上面;有关支持参数的完整列表,请参阅 TypedDict 类。
构建一个 DeiTImageProcessor 图像处理器。
preprocess
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] *args **kwargs: typing_extensions.Unpack[transformers.processing_utils.ImagesKwargs] ) → ~image_processing_base.BatchFeature
参数
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list[PIL.Image.Image], list[numpy.ndarray], list[torch.Tensor]]) — 要预处理的图像。期望单个图像或一批图像,其像素值范围从 0 到 255。如果传入像素值在 0 到 1 之间的图像,请设置do_rescale=False。 - return_tensors (
str或 TensorType, 可选) — 如果设置为'pt',则返回堆叠的张量,否则返回张量列表。 - **kwargs (ImagesKwargs, 可选) — 额外的图像预处理选项。模型特定的 kwargs 列在上面;有关支持参数的完整列表,请参阅 TypedDict 类。
返回
~image_processing_base.BatchFeature
- data (
dict) — 由 call 方法返回的列表/数组/张量字典(“pixel_values”等)。 - tensor_type (
Union[None, str, TensorType], optional) — 您可以在此处提供 tensor_type 以在初始化时将整数列表转换为 PyTorch/Numpy 张量。
DeiTModel
class transformers.DeiTModel
< source >( config: DeiTConfig add_pooling_layer: bool = True use_mask_token: bool = False )
参数
- config (DeiTConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
- add_pooling_layer (
bool, 可选, 默认为True) — 是否添加池化层。 - use_mask_token (
bool, 可选, 默认为False) — 是否使用用于遮蔽图像建模的遮蔽令牌。
输出原始隐藏状态且顶部没有任何特定头的原始 DeiT 模型。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( pixel_values: torch.Tensor | None = None bool_masked_pos: torch.BoolTensor | None = None interpolate_pos_encoding: bool | None = None attention_mask: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → BaseModelOutputWithPooling 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 对应于输入图像的张量。像素值可以使用 DeiTImageProcessor 获取。详情请参阅DeiTImageProcessor.__call__()(processor_class使用 DeiTImageProcessor 来处理图像)。 - bool_masked_pos (
torch.BoolTensor,形状为(batch_size, num_patches),可选) — 布尔遮蔽位置。指示哪些补丁被遮蔽(1),哪些未被遮蔽(0)。 - interpolate_pos_encoding (
bool,可选) — 是否插值预训练的位置编码。 - attention_mask (
torch.Tensor,形状为(batch_size, sequence_length),可选) — 用于避免对填充令牌索引执行注意力操作的掩码。掩码值选自[0, 1]:- 1 表示未遮蔽的令牌,
- 0 表示遮蔽的令牌。
返回
BaseModelOutputWithPooling or tuple(torch.FloatTensor)
一个 BaseModelOutputWithPooling 或一个 torch.FloatTensor 元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),根据配置(DeiTConfig)和输入,包含各种元素。
DeiTModel 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
last_hidden_state (
torch.FloatTensor, 形状为(batch_size, sequence_length, hidden_size)) — 模型最后一层输出的隐藏状态序列。pooler_output (
torch.FloatTensor,形状为(batch_size, hidden_size)) — 序列第一个 token(分类 token)在进一步通过用于辅助预训练任务的层后的最后一个隐藏状态。例如,对于 BERT 系列模型,这会返回经过线性层和 tanh 激活函数处理后的分类 token。线性层的权重是通过预训练期间的下一句预测(分类)目标来训练的。hidden_states (
tuple(torch.FloatTensor), optional, 当传递output_hidden_states=True或当config.output_hidden_states=True时返回) —torch.FloatTensor的元组(一个用于嵌入层的输出,如果模型有嵌入层;+一个用于每个层的输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
attentions (
tuple(torch.FloatTensor), optional, 当传递output_attentions=True或当config.output_attentions=True时返回) —torch.FloatTensor的元组(每个层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
DeiTForMaskedImageModeling
class transformers.DeiTForMaskedImageModeling
< source >( config: DeiTConfig )
参数
- config (DeiTConfig) — 具有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
带有顶部用于遮蔽图像建模的解码器的 DeiT 模型,如《SimMIM》中所提议。
请注意,我们在 examples directory 中提供了一个脚本,用于在自定义数据上预训练此模型。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( pixel_values: torch.Tensor | None = None bool_masked_pos: torch.BoolTensor | None = None interpolate_pos_encoding: bool = False attention_mask: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → MaskedImageModelingOutput 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size),可选) — 对应于输入图像的张量。像素值可以使用 DeiTImageProcessor 获取。详情请参阅DeiTImageProcessor.__call__()(processor_class使用 DeiTImageProcessor 来处理图像)。 - bool_masked_pos (
torch.BoolTensor,形状为(batch_size, num_patches)) — 布尔遮盖位置。指示哪些 patch 被遮盖 (1),哪些未被遮盖 (0)。 - interpolate_pos_encoding (
bool, 可选, 默认为False) — 是否插值预训练的位置编码。 - attention_mask (
torch.Tensor,形状为(batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行注意力计算的掩码。掩码值选自[0, 1]:- 1 表示未被遮盖的 token,
- 0 表示被遮盖的 token。
返回
MaskedImageModelingOutput 或 tuple(torch.FloatTensor)
一个 MaskedImageModelingOutput 或 torch.FloatTensor 元组(如果传递了 return_dict=False 或 config.return_dict=False),根据配置 (DeiTConfig) 和输入包含各种元素。
DeiTForMaskedImageModeling 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
- loss (
torch.FloatTensor,形状为(1,), 可选,在提供bool_masked_pos时返回) — 重建损失。 - reconstruction (
torch.FloatTensor,形状为(batch_size, num_channels, height, width)) — 重建/补全后的图像。 - hidden_states (
tuple(torch.FloatTensor), optional, 当传入output_hidden_states=True或当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个阶段的输出)。模型在每个阶段输出的隐藏状态(也称为特征图)。 - attentions (
tuple(torch.FloatTensor), 可选,在传递output_attentions=True或config.output_attentions=True时返回) —torch.FloatTensor元组(每层一个),形状为(batch_size, num_heads, patch_size, sequence_length)。注意力 softmax 之后的注意力权重,用于计算自注意力头中的加权平均值。
示例
>>> from transformers import AutoImageProcessor, DeiTForMaskedImageModeling
>>> 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)
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/deit-base-distilled-patch16-224")
>>> model = DeiTForMaskedImageModeling.from_pretrained("facebook/deit-base-distilled-patch16-224")
>>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
>>> pixel_values = image_processor(images=image, return_tensors="pt").pixel_values
>>> # create random boolean mask of shape (batch_size, num_patches)
>>> bool_masked_pos = torch.randint(low=0, high=2, size=(1, num_patches)).bool()
>>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
>>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
>>> list(reconstructed_pixel_values.shape)
[1, 3, 224, 224]DeiTForImageClassification
class transformers.DeiTForImageClassification
< source >( config: DeiTConfig )
参数
- config (DeiTConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
带有图像分类头的 DeiT 模型 Transformer(在 [CLS] token 的最终隐藏状态之上添加一个线性层),例如用于 ImageNet。
请注意,通过在模型的前向传播中将
interpolate_pos_encoding设置为True,可以在比训练时分辨率更高的图像上对 DeiT 进行微调。这会将预训练的位置嵌入插值到更高的分辨率。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( pixel_values: torch.Tensor | None = None labels: torch.Tensor | None = None interpolate_pos_encoding: bool | None = None attention_mask: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → ImageClassifierOutput 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size), 可选) — 对应于输入图像的张量。像素值可以使用 DeiTImageProcessor 获取。详情请参阅DeiTImageProcessor.__call__()(processor_class使用 DeiTImageProcessor 来处理图像)。 - labels (
torch.LongTensor,形状为(batch_size,), 可选) — 用于计算图像分类/回归损失的标签。索引应在[0, ..., config.num_labels - 1]范围内。如果config.num_labels == 1,则计算回归损失(均方误差损失);如果config.num_labels > 1,则计算分类损失(交叉熵损失)。 - interpolate_pos_encoding (
bool, 可选) — 是否插值预训练的位置编码。 - attention_mask (
torch.Tensor,形状为(batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行注意力计算的掩码。掩码值选自[0, 1]:- 1 表示未被遮盖的 token,
- 0 表示被遮盖的 token。
返回
ImageClassifierOutput 或 tuple(torch.FloatTensor)
一个 ImageClassifierOutput 或 torch.FloatTensor 元组(如果传递了 return_dict=False 或 config.return_dict=False),根据配置 (DeiTConfig) 和输入包含各种元素。
DeiTForImageClassification 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
loss (形状为
(1,)的torch.FloatTensor,可选,当提供labels时返回) — 分类损失(如果 config.num_labels==1,则为回归损失)。logits (形状为
(batch_size, config.num_labels)的torch.FloatTensor) — 分类(如果 config.num_labels==1,则为回归)分数(SoftMax 之前)。hidden_states (
tuple(torch.FloatTensor), optional, 当传入output_hidden_states=True或当config.output_hidden_states=True时返回) — 形状为(batch_size, sequence_length, hidden_size)的torch.FloatTensor元组(一个用于嵌入层的输出,如果模型有嵌入层,+ 每个阶段的输出)。模型在每个阶段输出的隐藏状态(也称为特征图)。attentions (
tuple(torch.FloatTensor), optional, 当传入output_attentions=True或当config.output_attentions=True时返回) — 形状为(batch_size, num_heads, patch_size, sequence_length)的torch.FloatTensor元组(每个层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
示例
>>> from transformers import AutoImageProcessor, DeiTForImageClassification
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/deit-base-distilled-patch16-224")
>>> model = DeiTForImageClassification.from_pretrained("facebook/deit-base-distilled-patch16-224")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...DeiTForImageClassificationWithTeacher
class transformers.DeiTForImageClassificationWithTeacher
< source >( config: DeiTConfig )
参数
- config (DeiTConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。请查看 from_pretrained() 方法以加载模型权重。
带有图像分类头的 DeiT 模型 Transformer(在 [CLS] token 的最终隐藏状态之上添加一个线性层,并在蒸馏 token 的最终隐藏状态之上添加一个线性层),例如用于 ImageNet。
.. 警告:
此模型仅支持推理。暂不支持通过蒸馏(即使用教师模型)进行微调。
该模型继承自 PreTrainedModel。请查看超类文档以了解该库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。
此模型也是一个 PyTorch torch.nn.Module 子类。像普通的 PyTorch Module 一样使用它,并参考 PyTorch 文档了解一般用法和行为的所有相关信息。
forward
< source >( pixel_values: torch.Tensor | None = None interpolate_pos_encoding: bool = False attention_mask: torch.Tensor | None = None **kwargs: typing_extensions.Unpack[transformers.utils.generic.TransformersKwargs] ) → DeiTForImageClassificationWithTeacherOutput 或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.Tensor,形状为(batch_size, num_channels, image_size, image_size), 可选) — 对应于输入图像的张量。像素值可以使用 DeiTImageProcessor 获取。详情请参阅DeiTImageProcessor.__call__()(processor_class使用 DeiTImageProcessor 来处理图像)。 - interpolate_pos_encoding (
bool, 可选, 默认为False) — 是否插值预训练的位置编码。 - attention_mask (
torch.Tensor,形状为(batch_size, sequence_length), 可选) — 用于避免对填充 token 索引执行注意力计算的掩码。掩码值选自[0, 1]:- 1 表示未被遮盖的 token,
- 0 表示被遮盖的 token。
返回
DeiTForImageClassificationWithTeacherOutput 或 tuple(torch.FloatTensor)
一个 DeiTForImageClassificationWithTeacherOutput 或 torch.FloatTensor 元组(如果传递了 return_dict=False 或 config.return_dict=False),根据配置 (DeiTConfig) 和输入包含各种元素。
DeiTForImageClassificationWithTeacher 的前向传播方法,覆盖了 __call__ 特殊方法。
虽然 forward pass 的实现需要在此函数中定义,但你应该在之后调用
Module实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会静默地忽略它们。
logits (
torch.FloatTensor,形状为(batch_size, config.num_labels)) — 预测分数,即 cls_logits 和蒸馏 logits 的平均值。cls_logits (形状为
(batch_size, config.num_labels)的torch.FloatTensor) — 分类头部(即类标记最终隐藏状态顶部线性层)的预测分数。distillation_logits (形状为
(batch_size, config.num_labels)的torch.FloatTensor) — 蒸馏头部(即蒸馏标记最终隐藏状态顶部线性层)的预测分数。hidden_states (
tuple[torch.FloatTensor],可选,在传入output_hidden_states=True或config.output_hidden_states=True时返回) —torch.FloatTensor元组(一个用于嵌入层的输出(如果模型有嵌入层的话) + 一个用于每层输出),形状为(batch_size, sequence_length, hidden_size)。模型在每个层输出的隐藏状态以及可选的初始嵌入输出。
attentions (
tuple[torch.FloatTensor],可选,在传入output_attentions=True或config.output_attentions=True时返回) —torch.FloatTensor元组(每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
示例
>>> from transformers import AutoImageProcessor, DeiTForImageClassificationWithTeacher
>>> import torch
>>> from datasets import load_dataset
>>> dataset = load_dataset("huggingface/cats-image")
>>> image = dataset["test"]["image"][0]
>>> image_processor = AutoImageProcessor.from_pretrained("facebook/deit-base-distilled-patch16-224")
>>> model = DeiTForImageClassificationWithTeacher.from_pretrained("facebook/deit-base-distilled-patch16-224")
>>> inputs = image_processor(image, return_tensors="pt")
>>> with torch.no_grad():
... logits = model(**inputs).logits
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_label = logits.argmax(-1).item()
>>> print(model.config.id2label[predicted_label])
...