ViTMAE
概览
ViTMAE 模型在 Masked Autoencoders Are Scalable Vision Learners 中被提出,作者是 Kaiming He, Xinlei Chen, Saining Xie, Yanghao Li, Piotr Dollár, Ross Girshick。 该论文表明,通过预训练 Vision Transformer (ViT) 来重建掩码块的像素值,可以在微调后获得优于监督预训练的结果。
该论文的摘要如下:
本文表明,掩码自动编码器 (MAE) 是用于计算机视觉的可扩展的自监督学习器。 我们的 MAE 方法很简单:我们掩盖输入图像的随机块并重建缺失的像素。 它基于两个核心设计。 首先,我们开发了一种非对称的编码器-解码器架构,其编码器仅在可见的块子集(没有掩码标记)上运行,以及一个轻量级的解码器,该解码器从潜在表示和掩码标记中重建原始图像。 其次,我们发现掩盖输入图像的很大一部分,例如 75%,会产生重要的且有意义的自监督任务。 将这两个设计结合起来使我们能够高效且有效地训练大型模型:我们加速了训练(3 倍或更多)并提高了准确性。 我们的可扩展方法允许学习泛化能力强的高容量模型:例如,vanilla ViT-Huge 模型在使用仅 ImageNet-1K 数据的方法中实现了最佳准确率 (87.8%)。 在下游任务中的迁移性能优于监督预训练,并显示出有希望的缩放行为。

此模型由 nielsr 贡献。 该模型的 TensorFlow 版本由 sayakpaul 和 ariG23498 贡献(同等贡献)。 原始代码可以在此处找到。
使用技巧
- MAE(掩码自动编码)是一种用于 Vision Transformers (ViTs) 自监督预训练的方法。 预训练目标相对简单:通过掩盖大部分(75%)图像块,模型必须重建原始像素值。 可以使用 ViTMAEForPreTraining 来实现此目的。
- 预训练后,将“丢弃”用于重建像素的解码器,并将编码器用于微调/线性探测。 这意味着在微调之后,可以直接将权重插入 ViTForImageClassification。
- 可以使用 ViTImageProcessor 来为模型准备图像。 有关更多信息,请参阅代码示例。
- 请注意,MAE 的编码器仅用于编码视觉块。 编码后的块随后与掩码标记连接,解码器(也由 Transformer 块组成)将其作为输入。 每个掩码标记都是一个共享的、学习到的向量,指示要预测的缺失块的存在。 固定 sin/cos 位置嵌入被添加到编码器和解码器的输入中。
- 为了直观地了解 MAE 的工作原理,您可以查看此帖子。
使用缩放点积注意力 (SDPA)
PyTorch 包含一个原生的缩放点积注意力 (SDPA) 运算符,作为 torch.nn.functional
的一部分。 此函数包含多个实现,可以根据输入和使用的硬件应用。 请参阅官方文档或GPU 推理页面以获取更多信息。
当实现可用时,torch>=2.1.1
默认使用 SDPA,但您也可以在 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,OS Ubuntu 22.04)中使用 float32
和 facebook/vit-mae-base
模型,我们在推理期间看到了以下加速。
批量大小 | 平均推理时间 (ms),eager 模式 | 平均推理时间 (ms),sdpa 模型 | 加速,Sdpa / Eager (x) |
---|---|---|---|
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
, 可选, 默认为 768) — 编码器层和池化器层的维度。 - num_hidden_layers (
int
, 可选, 默认为 12) — Transformer 编码器中隐藏层的数量。 - num_attention_heads (
int
, 可选, 默认为 12) — Transformer 编码器中每个注意力层的注意力头数。 - intermediate_size (
int
, 可选, 默认为 3072) — Transformer 编码器中“中间”(即,前馈)层的维度。 - hidden_act (
str
或function
, 可选, 默认为"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。 如果是字符串,则支持"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - hidden_dropout_prob (
float
, optional, defaults to 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, optional, defaults to 0.0) — attention 概率的 dropout 比率。 - initializer_range (
float
, optional, defaults to 0.02) — 用于初始化所有权重矩阵的截断正态初始化器的标准差。 - layer_norm_eps (
float
, optional, defaults to 1e-12) — layer normalization 层使用的 epsilon 值。 - image_size (
int
, optional, defaults to 224) — 每个图像的大小(分辨率)。 - patch_size (
int
, optional, defaults to 16) — 每个 patch 的大小(分辨率)。 - num_channels (
int
, optional, defaults to 3) — 输入通道的数量。 - qkv_bias (
bool
, optional, defaults toTrue
) — 是否向 queries, keys 和 values 添加 bias。 - decoder_num_attention_heads (
int
, optional, defaults to 16) — 解码器中每个 attention 层的 attention head 数量。 - decoder_hidden_size (
int
, optional, defaults to 512) — 解码器的维度。 - decoder_num_hidden_layers (
int
, optional, defaults to 8) — 解码器中 hidden layer 的数量。 - decoder_intermediate_size (
int
, optional, defaults to 2048) — 解码器中“中间”层(即,前馈层)的维度。 - mask_ratio (
float
, optional, defaults to 0.75) — 输入序列中被 mask 的 token 的比率。 - norm_pix_loss (
bool
, optional, defaults toFalse
) — 是否使用归一化像素进行训练(参见论文中的表 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
class transformers.ViTMAEModel
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
裸 ViTMAE 模型 Transformer 输出原始 hidden-states,顶部没有任何特定的 head。 此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以了解与常规用法和行为相关的所有事项。
forward
< source >( pixel_values: Optional = None noise: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_vit_mae.ViTMAEModelOutput
or tuple(torch.FloatTensor)
参数
- pixel_values (
torch.FloatTensor
,形状为(batch_size, num_channels, height, width)
) — 像素值。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, optional) — 用于 nullify self-attention 模块中选定 head 的 mask。 在[0, 1]
中选择的 Mask 值:- 1 表示 head 未被 mask,
- 0 表示 head 被 mask。
- output_attentions (
bool
, optional) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参阅返回的 tensors 下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的 hidden states。 有关更多详细信息,请参阅返回的 tensors 下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是普通 tuple。 - 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
的 tuple(如果传递 return_dict=False
或当 config.return_dict=False
时),包含各种元素,具体取决于配置 (ViTMAEConfig) 和输入。
- last_hidden_state (
torch.FloatTensor
,形状为(batch_size, sequence_length, hidden_size)
) — 模型最后一层的输出端的 hidden-states 序列。 - mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — Tensor,指示哪些 patch 被 mask (1),哪些没有 (0)。 - ids_restore (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — Tensor,包含 (shuffled) 被 mask 的 patch 的原始索引。 - 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 的 forward 方法,覆盖了 __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
class transformers.ViTMAEForPreTraining
< source >( config )
参数
- config (ViTMAEConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
带有解码器置于顶部的 ViTMAE 模型转换器,用于自监督预训练。
请注意,我们在 examples directory 中提供了一个脚本,用于在自定义数据上预训练此模型。
此模型是 PyTorch torch.nn.Module 子类。 将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,了解所有与常规用法和行为相关的事项。
forward
< source >( pixel_values: Optional = None noise: Optional = None head_mask: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None interpolate_pos_encoding: bool = False ) → transformers.models.vit_mae.modeling_vit_mae.ViTMAEForPreTrainingOutput
or tuple(torch.FloatTensor)
参数
- pixel_values (形状为
(batch_size, num_channels, height, width)
的torch.FloatTensor
) — 像素值。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (形状为
(num_heads,)
或(num_layers, num_heads)
的torch.FloatTensor
, 可选) — 用于置零自注意力模块中选定头的掩码。 在[0, 1]
中选择的掩码值:- 1 表示头未被掩蔽,
- 0 表示头被掩蔽。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参阅返回张量下的attentions
。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参阅返回张量下的hidden_states
。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。 - interpolate_pos_encoding (
bool
, 可选, 默认为False
) — 是否插值预训练的位置编码。 这主要用于在更高分辨率的图像上使用模型。
返回
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 (形状为
(1,)
的torch.FloatTensor
) — 像素重建损失。 - logits (形状为
(batch_size, sequence_length, patch_size ** 2 * num_channels)
的torch.FloatTensor
) — 像素重建 logits。 - mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — Tensor,指示哪些 patch 被 mask (1),哪些没有 (0)。 - ids_restore (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — Tensor,包含 (shuffled) 被 mask 的 patch 的原始索引。 - 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 的 forward 方法,覆盖了 __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
class transformers.TFViTMAEModel
< source >( config: ViTMAEConfig *inputs **kwargs )
参数
- config (ViTMAEConfig) — 带有模型所有参数的模型配置类。 使用配置文件初始化不会加载与模型关联的权重,仅加载配置。 查看 from_pretrained() 方法来加载模型权重。
裸 ViTMAE 模型转换器,输出原始隐藏状态,顶部没有任何特定的 head。 此模型继承自 TFPreTrainedModel。 查看超类文档,了解库为所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。
此模型也是 keras.Model 子类。 将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解所有与常规用法和行为相关的事项。
transformers
中的 TensorFlow 模型和层接受两种格式作为输入
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢此格式。 由于这种支持,当使用诸如 model.fit()
之类的方法时,事情应该对您“正常工作” - 只需以 model.fit()
支持的任何格式传递您的输入和标签即可! 但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< 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
or tuple(tf.Tensor)
参数
- pixel_values (
np.ndarray
,tf.Tensor
,List[tf.Tensor]
`Dict[str, tf.Tensor]
或Dict[str, np.ndarray]
并且每个示例都必须具有形状(batch_size, num_channels, height, width)
) — 像素值。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (形状为
(num_heads,)
或(num_layers, num_heads)
的np.ndarray
或tf.Tensor
, 可选) — 用于置零自注意力模块中选定头的掩码。 在[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。 - training (
bool
, 可选, 默认为 `False“) — 是否在训练模式下使用模型(某些模块(如 dropout 模块)在训练和评估之间具有不同的行为)。 - interpolate_pos_encoding (
bool
, 可选, 默认为False
) — 是否在编码器和解码器处插值位置编码。
返回
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 (形状为
(batch_size, sequence_length, hidden_size)
的tf.Tensor
) — 模型最后一层的输出端的隐藏状态序列。 - mask (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 指示哪些 patch 被掩蔽 (1) 和哪些未被掩蔽 (0) 的张量。 - ids_restore (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 包含(打乱顺序的)掩蔽 patch 的原始索引的张量。 - 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 后的注意力权重,用于计算自注意力头中的加权平均。
TFViTMAEModel 的 forward 方法,覆盖了 __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
class transformers.TFViTMAEForPreTraining
< source >( config )
参数
- config (ViTMAEConfig) — 带有模型所有参数的模型配置类。使用配置文件初始化不会加载与模型相关的权重,仅加载配置。查看 from_pretrained() 方法来加载模型权重。
带有解码器的 ViTMAE 模型转换器,用于自监督预训练。此模型继承自 TFPreTrainedModel。查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头等)。
此模型也是 keras.Model 子类。 将其用作常规 TF 2.0 Keras 模型,并参阅 TF 2.0 文档,了解所有与常规用法和行为相关的事项。
transformers
中的 TensorFlow 模型和层接受两种格式作为输入
- 所有输入都作为关键字参数(如 PyTorch 模型),或者
- 所有输入都作为第一个位置参数中的列表、元组或字典。
支持第二种格式的原因是 Keras 方法在将输入传递给模型和层时更喜欢此格式。 由于这种支持,当使用诸如 model.fit()
之类的方法时,事情应该对您“正常工作” - 只需以 model.fit()
支持的任何格式传递您的输入和标签即可! 但是,如果您想在 Keras 方法(如 fit()
和 predict()
)之外使用第二种格式,例如在使用 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 函数一样传递输入!
call
< 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]
或Dict[str, np.ndarray]
,并且每个示例必须具有形状(batch_size, num_channels, height, width)
) — 像素值。像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (形状为
(num_heads,)
或(num_layers, num_heads)
的np.ndarray
或tf.Tensor
, 可选) — 用于使自注意力模块的选定头无效的掩码。在[0, 1]
中选择的掩码值:- 1 表示头是未被掩蔽的,
- 0 表示头是被掩蔽的。
- output_attentions (
bool
, 可选) — 是否返回所有注意力层的注意力张量。 有关更多详细信息,请参见返回张量下的attentions
。 此参数只能在即时模式下使用,在图模式下将使用配置中的值。 - output_hidden_states (
bool
, 可选) — 是否返回所有层的隐藏状态。 有关更多详细信息,请参见返回张量下的hidden_states
。 此参数只能在即时模式下使用,在图模式下将使用配置中的值。 - return_dict (
bool
, 可选) — 是否返回 ModelOutput 而不是普通元组。此参数可以在即时模式下使用,在图模式下该值将始终设置为 True。 - training (
bool
, 可选, 默认为 “False“) — 是否在训练模式下使用模型(某些模块,如 dropout 模块,在训练和评估之间具有不同的行为)。 - interpolate_pos_encoding (
bool
, 可选, 默认为False
) — 是否在编码器和解码器处插值位置编码。
返回
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 (形状为
(1,)
的tf.Tensor
) — 像素重建损失。 - logits (形状为
(batch_size, sequence_length, patch_size ** 2 * num_channels)
的tf.Tensor
) — 像素重建 logits。 - mask (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 指示哪些 patch 被掩蔽 (1) 和哪些未被掩蔽 (0) 的张量。 - ids_restore (形状为
(batch_size, sequence_length)
的tf.Tensor
) — 包含(打乱顺序的)掩蔽 patch 的原始索引的张量。 - 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