ViTMAE
概述
ViTMAE模型由Kaiming He、Xinlei Chen、Saining Xie、Yanghao Li、Piotr Dollár和Ross Girshick在Masked Autoencoders Are Scalable Vision Learners中提出。论文表明,通过预训练Vision Transformer(ViT)来重建被遮蔽的像素值,可以在微调后获得优于监督预训练的结果。
论文的摘要如下:
本文展示了掩码自编码器(MAE)是计算机视觉中可扩展的自监督学习器。我们的MAE方法很简单:我们掩码输入图像的随机补丁并重建缺失的像素。它基于两个核心设计。首先,我们开发了一种非对称的编码器-解码器架构,其中编码器仅对可见的补丁子集进行操作(没有掩码标记),以及一个轻量级的解码器,从潜在表示和掩码标记重建原始图像。其次,我们发现掩码输入图像的高比例,例如75%,会产生一个非平凡且有意义的自监督任务。结合这两种设计使我们能够高效且有效地训练大型模型:我们加速了训练(3倍或更多)并提高了准确性。我们的可扩展方法允许学习具有良好泛化能力的高容量模型:例如,一个普通的ViT-Huge模型在使用仅ImageNet-1K数据的方法中达到了最佳准确性(87.8%)。在下游任务中的迁移性能优于监督预训练,并显示出有希望的扩展行为。
![drawing](https://user-images.githubusercontent.com/11435359/146857310-f258c86c-fde6-48e8-9cee-badd2b21bd2c.png)
该模型由nielsr贡献。模型的TensorFlow版本由sayakpaul和ariG23498(同等贡献)贡献。原始代码可以在这里找到。
使用提示
- MAE(掩码自编码)是一种用于视觉变换器(ViTs)自监督预训练的方法。预训练目标相对简单:通过掩盖大部分(75%)图像块,模型必须重建原始像素值。可以使用ViTMAEForPreTraining来实现这一目的。
- 在预训练之后,人们“丢弃”用于重建像素的解码器,并使用编码器进行微调/线性探测。这意味着在微调之后,可以直接将权重插入到ViTForImageClassification中。
- 可以使用ViTImageProcessor来为模型准备图像。有关更多信息,请参阅代码示例。
- 请注意,MAE的编码器仅用于编码视觉补丁。编码后的补丁随后与掩码标记连接,解码器(也由Transformer块组成)将其作为输入。每个掩码标记是一个共享的、学习的向量,表示要预测的缺失补丁的存在。固定的正弦/余弦位置嵌入被添加到编码器和解码器的输入中。
- 要直观地理解MAE的工作原理,您可以查看这篇文章。
使用缩放点积注意力 (SDPA)
PyTorch 包含一个原生的缩放点积注意力(SDPA)操作符,作为 torch.nn.functional
的一部分。这个函数
包含了几种实现,可以根据输入和使用的硬件进行应用。更多信息请参阅
官方文档
或 GPU 推理
页面。
默认情况下,当有可用实现时,SDPA 用于 torch>=2.1.1
,但你也可以在 from_pretrained()
中设置 attn_implementation="sdpa"
来明确请求使用 SDPA。
from transformers import ViTMAEModel
model = ViTMAEModel.from_pretrained("facebook/vit-mae-base", attn_implementation="sdpa", torch_dtype=torch.float16)
...
为了获得最佳加速效果,我们建议以半精度加载模型(例如 torch.float16
或 torch.bfloat16
)。
在本地基准测试(A100-40GB,PyTorch 2.3.0,操作系统 Ubuntu 22.04)中,使用float32
和facebook/vit-mae-base
模型,我们在推理过程中看到了以下加速效果。
批量大小 | 平均推理时间(毫秒),eager模式 | 平均推理时间(毫秒),sdpa模型 | 加速比,Sdpa / Eager(倍) |
---|---|---|---|
1 | 11 | 6 | 1.83 |
2 | 8 | 6 | 1.33 |
4 | 8 | 6 | 1.33 |
8 | 8 | 6 | 1.33 |
资源
以下是官方Hugging Face和社区(由🌎表示)提供的资源列表,帮助您开始使用ViTMAE。
- ViTMAEForPreTraining 支持通过此 示例脚本 进行预训练,允许你从头开始预训练模型或在自定义数据上进一步预训练模型。
- 一个展示如何使用ViTMAEForPreTraining可视化重建像素值的笔记本可以在这里找到。
如果您有兴趣提交资源以包含在此处,请随时打开一个 Pull Request,我们将进行审核!理想情况下,资源应展示一些新内容,而不是重复现有资源。
ViTMAEConfig
class transformers.ViTMAEConfig
< source >( hidden_size = 768 num_hidden_layers = 12 num_attention_heads = 12 intermediate_size = 3072 hidden_act = 'gelu' hidden_dropout_prob = 0.0 attention_probs_dropout_prob = 0.0 initializer_range = 0.02 layer_norm_eps = 1e-12 image_size = 224 patch_size = 16 num_channels = 3 qkv_bias = True decoder_num_attention_heads = 16 decoder_hidden_size = 512 decoder_num_hidden_layers = 8 decoder_intermediate_size = 2048 mask_ratio = 0.75 norm_pix_loss = False **kwargs )
参数
- hidden_size (
int
, optional, defaults to 768) — 编码器层和池化层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中的隐藏层数量。 - num_attention_heads (
int
, optional, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - intermediate_size (
int
, optional, 默认为 3072) — Transformer 编码器中“中间”(即前馈)层的维度。 - hidden_act (
str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果是字符串,支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - hidden_dropout_prob (
float
, optional, 默认为 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, optional, defaults to 0.0) — 注意力概率的丢弃比率。 - initializer_range (
float
, 可选, 默认为 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - layer_norm_eps (
float
, optional, 默认为 1e-12) — 层归一化层使用的 epsilon 值。 - image_size (
int
, optional, 默认为 224) — 每张图片的大小(分辨率)。 - patch_size (
int
, optional, defaults to 16) — 每个补丁的大小(分辨率)。 - num_channels (
int
, optional, defaults to 3) — 输入通道的数量。 - qkv_bias (
bool
, optional, defaults toTrue
) — 是否在查询、键和值中添加偏置。 - decoder_num_attention_heads (
int
, optional, defaults to 16) — 解码器中每个注意力层的注意力头数。 - decoder_hidden_size (
int
, optional, defaults to 512) — 解码器的维度。 - decoder_num_hidden_layers (
int
, optional, 默认为 8) — 解码器中的隐藏层数。 - decoder_intermediate_size (
int
, optional, defaults to 2048) — 解码器中“中间”(即前馈)层的维度。 - mask_ratio (
float
, optional, defaults to 0.75) — 输入序列中被掩码标记的数量的比例。 - norm_pix_loss (
bool
, 可选, 默认为False
) — 是否使用归一化像素进行训练(参见论文中的表3)。在作者的实验中,使用归一化像素提高了表示质量。
这是用于存储ViTMAEModel配置的配置类。它用于根据指定的参数实例化一个ViT MAE模型,定义模型架构。使用默认值实例化配置将产生类似于ViT facebook/vit-mae-base架构的配置。
配置对象继承自PretrainedConfig,可用于控制模型输出。阅读PretrainedConfig的文档以获取更多信息。
示例:
>>> from transformers import ViTMAEConfig, ViTMAEModel
>>> # Initializing a ViT MAE vit-mae-base style configuration
>>> configuration = ViTMAEConfig()
>>> # Initializing a model (with random weights) from the vit-mae-base style configuration
>>> model = ViTMAEModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
ViTMAEModel
类 transformers.ViTMAEModel
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
裸的ViTMAE模型转换器输出原始隐藏状态,没有任何特定的头部。 此模型是PyTorch torch.nn.Module 的子类。将其 用作常规的PyTorch模块,并参考PyTorch文档以获取与一般使用和行为相关的所有事项。
前进
< source >( pixel_values: typing.Optional[torch.FloatTensor] = None noise: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以使用AutoImageProcessor获取。详情请参见ViTImageProcessor.call()。 - head_mask (
torch.FloatTensor
形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个 ModelOutput 而不是一个普通的元组。 - interpolate_pos_encoding (
bool
, optional, defaultFalse
) — 是否插值预训练的位置编码。这主要用于在更高分辨率的图像上使用模型。
返回
transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
或者一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或者当 config.return_dict=False
时),包含各种
元素,具体取决于配置(ViTMAEConfig)和输入。
- last_hidden_state (
torch.FloatTensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 - mask (
torch.FloatTensor
形状为(batch_size, sequence_length)
) — 指示哪些补丁被掩码(1)和哪些没有被掩码(0)的张量。 - ids_restore (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 包含(打乱的)掩码补丁的原始索引的张量。 - 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 之后,用于计算 自注意力头中的加权平均值。
ViTMAEModel 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, ViTMAEModel
>>> 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/vit-mae-base")
>>> model = ViTMAEModel.from_pretrained("facebook/vit-mae-base")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
ViTMAEForPreTraining
类 transformers.ViTMAEForPreTraining
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
ViTMAE模型转换器,顶部带有解码器,用于自监督预训练。
请注意,我们在示例目录中提供了一个脚本来在自定义数据上预训练此模型。
该模型是一个PyTorch torch.nn.Module 子类。将其用作常规的PyTorch模块,并参考PyTorch文档以获取与一般使用和行为相关的所有信息。
前进
< source >( pixel_values: typing.Optional[torch.FloatTensor] = None noise: typing.Optional[torch.FloatTensor] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或 tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
of shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以使用AutoImageProcessor获取。详情请参见ViTImageProcessor.call()。 - head_mask (
torch.FloatTensor
形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。 - interpolate_pos_encoding (
bool
, optional, defaultFalse
) — 是否插值预训练的位置编码。这主要用于在更高分辨率的图像上使用模型。
返回
transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或 tuple(torch.FloatTensor)
一个 transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
或一个由
torch.FloatTensor
组成的元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含各种
元素,具体取决于配置(ViTMAEConfig)和输入。
- loss (
torch.FloatTensor
形状为(1,)
) — 像素重建损失。 - logits (
torch.FloatTensor
形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建 logits。 - mask (
torch.FloatTensor
形状为(batch_size, sequence_length)
) — 指示哪些补丁被掩码(1)和哪些没有被掩码(0)的张量。 - ids_restore (
torch.LongTensor
形状为(batch_size, sequence_length)
) — 包含(打乱的)掩码补丁的原始索引的张量。 - 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 后的注意力权重,用于计算 自注意力头中的加权平均值。
ViTMAEForPreTraining 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, ViTMAEForPreTraining
>>> 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/vit-mae-base")
>>> model = ViTMAEForPreTraining.from_pretrained("facebook/vit-mae-base")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> loss = outputs.loss
>>> mask = outputs.mask
>>> ids_restore = outputs.ids_restore
TFViTMAEModel
类 transformers.TFViTMAEModel
< source >( config: ViTMAEConfig *inputs **kwargs )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
裸的ViTMAE模型转换器输出原始隐藏状态,没有任何特定的头部。 此模型继承自TFPreTrainedModel。请查看超类文档以了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪头部等)。
该模型也是一个keras.Model子类。可以将其作为常规的TF 2.0 Keras模型使用,并参考TF 2.0文档以了解与一般使用和行为相关的所有事项。
TensorFlow 模型和层在 transformers
中接受两种格式作为输入:
- 将所有输入作为关键字参数(如PyTorch模型),或
- 将所有输入作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是,Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用像 model.fit()
这样的方法时,事情应该“正常工作”——只需以 model.fit()
支持的任何格式传递你的输入和标签!然而,如果你想在 Keras 方法之外使用第二种格式,比如在使用 Keras Functional
API 创建自己的层或模型时,有三种方法可以用来将所有输入张量收集到第一个位置参数中:
- 仅包含
pixel_values
的单个张量,没有其他内容:model(pixel_values)
- 一个长度不定的列表,包含一个或多个输入张量,顺序与文档字符串中给出的顺序一致:
model([pixel_values, attention_mask])
或model([pixel_values, attention_mask, token_type_ids])
- 一个字典,包含一个或多个与文档字符串中给出的输入名称相关联的输入张量:
model({"pixel_values": pixel_values, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,您不需要担心这些,因为您可以像传递任何其他Python函数一样传递输入!
调用
< source >( pixel_values: TFModelInputType | None = None noise: tf.Tensor = None head_mask: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEModelOutput
或 tuple(tf.Tensor)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
orDict[str, np.ndarray]
and each example must have the shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以使用AutoImageProcessor获取。详情请参见ViTImageProcessor.call()。 - head_mask (
np.ndarray
或tf.Tensor
形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块中选定头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
。此参数只能在eager模式下使用,在graph模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。此参数只能在eager模式下使用,在graph模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。此参数可以在eager模式下使用,在graph模式下该值将始终设置为True. - 训练 (
bool
, 可选, 默认为 `False“) — 是否在训练模式下使用模型(一些模块如dropout模块在训练和评估之间有不同的行为)。 - interpolate_pos_encoding (
bool
, optional, defaults toFalse
) — 是否在编码器和解码器处插值位置编码。
返回
transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEModelOutput
或 tuple(tf.Tensor)
一个 transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEModelOutput
或一个 tf.Tensor
元组(如果传递了 return_dict=False
或当 config.return_dict=False
时),包含根据配置(ViTMAEConfig)和输入的各种元素。
- last_hidden_state (
tf.Tensor
形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层输出的隐藏状态序列。 - mask (
tf.Tensor
形状为(batch_size, sequence_length)
) — 指示哪些补丁被掩码(1)和哪些未被掩码(0)的张量。 - ids_restore (
tf.Tensor
形状为(batch_size, sequence_length)
) — 包含(打乱的)掩码补丁的原始索引的张量。 - hidden_states (
tuple(tf.Tensor)
, 可选, 当传递了output_hidden_states=True
或当config.output_hidden_states=True
时返回) — 形状为(batch_size, sequence_length, hidden_size)
的tf.Tensor
元组(一个用于嵌入的输出 + 一个用于每层的输出)。模型在每层输出处的隐藏状态加上初始嵌入输出。 - attentions (
tuple(tf.Tensor)
, 可选, 当传递了output_attentions=True
或当config.output_attentions=True
时返回) — 形状为(batch_size, num_heads, sequence_length, sequence_length)
的tf.Tensor
元组(每层一个)。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFViTMAEModel 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, TFViTMAEModel
>>> 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/vit-mae-base")
>>> model = TFViTMAEModel.from_pretrained("facebook/vit-mae-base")
>>> inputs = image_processor(images=image, return_tensors="tf")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
TFViTMAEForPreTraining
类 transformers.TFViTMAEForPreTraining
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型相关的权重,只会加载配置。查看 from_pretrained() 方法以加载模型权重。
ViTMAE模型转换器,顶部带有解码器,用于自监督预训练。 该模型继承自TFPreTrainedModel。请查看超类文档,了解库为其所有模型实现的通用方法(如下载或保存、调整输入嵌入大小、修剪头部等)。
该模型也是一个keras.Model子类。可以将其作为常规的TF 2.0 Keras模型使用,并参考TF 2.0文档以了解与一般使用和行为相关的所有事项。
TensorFlow 模型和层在 transformers
中接受两种格式作为输入:
- 将所有输入作为关键字参数(如PyTorch模型),或
- 将所有输入作为列表、元组或字典放在第一个位置参数中。
支持第二种格式的原因是,Keras 方法在将输入传递给模型和层时更喜欢这种格式。由于这种支持,当使用像 model.fit()
这样的方法时,事情应该“正常工作”——只需以 model.fit()
支持的任何格式传递你的输入和标签!然而,如果你想在 Keras 方法之外使用第二种格式,比如在使用 Keras Functional
API 创建自己的层或模型时,有三种方法可以用来将所有输入张量收集到第一个位置参数中:
- 仅包含
pixel_values
的单个张量,没有其他内容:model(pixel_values)
- 一个长度不定的列表,包含一个或多个输入张量,顺序与文档字符串中给出的顺序一致:
model([pixel_values, attention_mask])
或model([pixel_values, attention_mask, token_type_ids])
- 一个字典,包含一个或多个与文档字符串中给出的输入名称相关联的输入张量:
model({"pixel_values": pixel_values, "token_type_ids": token_type_ids})
请注意,当使用子类化创建模型和层时,您不需要担心这些,因为您可以像传递任何其他Python函数一样传递输入!
调用
< source >( pixel_values: TFModelInputType | None = None noise: tf.Tensor = None head_mask: np.ndarray | tf.Tensor | None = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None return_dict: Optional[bool] = None training: bool = False interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEForPreTrainingOutput
或 tuple(tf.Tensor)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
orDict[str, np.ndarray]
and each example must have the shape(batch_size, num_channels, height, width)
) — 像素值。像素值可以使用AutoImageProcessor获取。详情请参见ViTImageProcessor.call()。 - head_mask (
np.ndarray
或tf.Tensor
形状为(num_heads,)
或(num_layers, num_heads)
, 可选) — 用于屏蔽自注意力模块中选定的头部的掩码。掩码值在[0, 1]
中选择:- 1 表示头部 未被屏蔽,
- 0 表示头部 被屏蔽.
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。有关更多详细信息,请参见返回张量中的attentions
。此参数只能在eager模式下使用,在graph模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。有关更多详细信息,请参见返回张量下的hidden_states
。此参数只能在eager模式下使用,在graph模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回一个ModelOutput而不是一个普通的元组。此参数可以在eager模式下使用,在graph模式下该值将始终设置为True. - 训练 (
bool
, 可选, 默认为 `False“) — 是否在训练模式下使用模型(一些模块如dropout模块在训练和评估之间有不同的行为)。 - interpolate_pos_encoding (
bool
, optional, defaults toFalse
) — 是否在编码器和解码器处插值位置编码。
返回
transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEForPreTrainingOutput
或 tuple(tf.Tensor)
一个 transformers.models.vit_mae.modeling_tf_vit_mae.TFViTMAEForPreTrainingOutput
或一个 tf.Tensor
元组(如果
return_dict=False
被传递或当 config.return_dict=False
时),包含根据配置(ViTMAEConfig)和输入的各种元素。
- loss (
tf.Tensor
形状为(1,)
) — 像素重建损失。 - logits (
tf.Tensor
形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建 logits。 - mask (
tf.Tensor
形状为(batch_size, sequence_length)
) — 指示哪些 patches 被掩码(1)和哪些未被掩码(0)的张量。 - ids_restore (
tf.Tensor
形状为(batch_size, sequence_length)
) — 包含(打乱的)掩码 patches 的原始索引的张量。 - hidden_states (
tuple(tf.Tensor)
, 可选, 当output_hidden_states=True
被传递或当config.output_hidden_states=True
时返回) —tf.Tensor
元组(一个用于嵌入的输出 + 一个用于每层的输出)形状为(batch_size, sequence_length, hidden_size)
。模型在每层输出处的隐藏状态加上初始嵌入输出。 - attentions (
tuple(tf.Tensor)
, 可选, 当output_attentions=True
被传递或当config.output_attentions=True
时返回) —tf.Tensor
元组(每层一个)形状为(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 后的注意力权重,用于计算自注意力头中的加权平均值。
TFViTMAEForPreTraining 的前向方法,重写了 __call__
特殊方法。
尽管前向传递的配方需要在此函数内定义,但之后应该调用Module
实例而不是这个,因为前者负责运行预处理和后处理步骤,而后者会默默地忽略它们。
示例:
>>> from transformers import AutoImageProcessor, TFViTMAEForPreTraining
>>> 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/vit-mae-base")
>>> model = TFViTMAEForPreTraining.from_pretrained("facebook/vit-mae-base")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> loss = outputs.loss
>>> mask = outputs.mask
>>> ids_restore = outputs.ids_restore