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

此模型由 nielsr 贡献。 该模型的 TensorFlow 版本由 sayakpaul 和 ariG23498 贡献(同等贡献)。 原始代码可以在 这里 找到。
使用技巧
- MAE(masked auto encoding)是 Vision Transformers (ViTs) 自监督预训练的一种方法。 预训练目标相对简单:通过屏蔽大部分 (75%) 的图像patches,模型必须重建原始像素值。 可以使用 ViTMAEForPreTraining 来实现此目的。
- 预训练后,需要“丢弃”用于重建像素的解码器,并使用编码器进行微调/线性探测。 这意味着微调后,可以直接将权重插入到 ViTForImageClassification 中。
- 可以使用 ViTImageProcessor 来为模型准备图像。 有关更多信息,请参阅代码示例。
- 请注意,MAE 的编码器仅用于编码视觉patches。 然后,编码后的patches与mask tokens连接,解码器(也由 Transformer blocks 组成)将其作为输入。 每个mask token是一个共享的、学习到的向量,指示要预测的缺失patch的存在。 固定 sin/cos 位置嵌入被添加到编码器和解码器的输入中。
- 为了直观地理解 MAE 的工作原理,您可以查看此 帖子。
使用 Scaled Dot Product Attention (SDPA)
PyTorch 包含一个原生的 scaled dot-product attention (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, OS Ubuntu 22.04) 中,使用 float32 和 facebook/vit-mae-base 模型,我们看到了以下推理期间的加速。
批大小 | 平均推理时间(毫秒),eager 模式 | 平均推理时间(毫秒),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 可视化重建像素值的 notebook 可以在 这里 找到。
如果您有兴趣提交资源以包含在此处,请随时打开 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
, optional, 默认值是 3072) — Transformer 编码器中“中间层”(即,前馈层)的维度。 - hidden_act (
str
或function
, optional, 默认值是"gelu"
) — 编码器和池化器中的非线性激活函数(函数或字符串)。如果为字符串,则支持"gelu"
,"relu"
,"selu"
和"gelu_new"
。 - hidden_dropout_prob (
float
, optional, 默认值是 0.0) — 嵌入层、编码器和池化器中所有全连接层的 dropout 概率。 - attention_probs_dropout_prob (
float
, optional, 默认值是 0.0) — attention 概率的 dropout 比率。 - initializer_range (
float
, optional, 默认值是 0.02) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。 - layer_norm_eps (
float
, optional, 默认值是 1e-12) — layer normalization 层使用的 epsilon 值。 - image_size (
int
, optional, 默认值是 224) — 每张图片的大小(分辨率)。 - patch_size (
int
, optional, 默认值是 16) — 每个 patch 的大小(分辨率)。 - num_channels (
int
, optional, 默认值是 3) — 输入通道的数量。 - qkv_bias (
bool
, optional, 默认值是True
) — 是否向 queries, keys 和 values 添加 bias。 - decoder_num_attention_heads (
int
, optional, 默认值是 16) — 解码器中每个 attention 层的 attention heads 数量。 - decoder_hidden_size (
int
, optional, 默认值是 512) — 解码器的维度。 - decoder_num_hidden_layers (
int
, optional, 默认值是 8) — 解码器中 hidden layers 的数量。 - decoder_intermediate_size (
int
, optional, 默认值是 2048) — 解码器中“中间层”(即,前馈层)的维度。 - mask_ratio (
float
, optional, 默认值是 0.75) — 输入序列中被 mask 的 tokens 数量的比率。 - norm_pix_loss (
bool
, optional, 默认值是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
class transformers.ViTMAEModel
< source >( config )
参数
- config (ViTMAEConfig) — 包含模型所有参数的模型配置类。使用配置文件初始化不会加载与模型关联的权重,仅加载配置。查看 from_pretrained() 方法以加载模型权重。
裸 ViTMAE 模型 Transformer,输出原始 hidden-states,顶部没有任何特定的 head。 此模型是 PyTorch torch.nn.Module 子类。 可以将其用作常规 PyTorch 模块,并参阅 PyTorch 文档,以了解与常规用法和行为相关的所有事项。
forward
< 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
,形状为(batch_size, num_channels, height, width)
) — 像素值。 像素值可以使用 AutoImageProcessor 获得。 有关详细信息,请参阅 ViTImageProcessor.call()。 - head_mask (
torch.FloatTensor
,形状为(num_heads,)
或(num_layers, num_heads)
, optional) — 用于 nullify self-attention 模块中选定 heads 的 Mask。 Mask 值在[0, 1]
中选择:- 1 表示 head 未被 mask,
- 0 表示 head 被 mask。
- output_attentions (
bool
, optional) — 是否返回所有 attention 层的 attentions tensors。 有关更多详细信息,请参见返回 tensors 下的attentions
。 - output_hidden_states (
bool
, optional) — 是否返回所有层的 hidden states。 有关更多详细信息,请参见返回 tensors 下的hidden_states
。 - return_dict (
bool
, optional) — 是否返回 ModelOutput 而不是普通 tuple。 - interpolate_pos_encoding (
bool
, optional, 默认值是False
) — 是否插值预训练的位置编码。 这主要用于在高分辨率图像上使用模型。
返回值
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,指示哪些 patches 被 mask (1),哪些没有被 mask (0)。 - ids_restore (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — Tensor,包含 (shuffled) masked patches 的原始索引。 - hidden_states (
tuple(torch.FloatTensor)
, optional, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的 Tuple (embeddings 的输出一个,每个层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。 模型在每一层输出端的 Hidden-states 加上初始 embedding 输出。 - attentions (
tuple(torch.FloatTensor)
, optional, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的 Tuple (每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。 attention softmax 之后的 Attention 权重,用于计算 self-attention heads 中的加权平均值。
ViTMAEModel forward 方法,覆盖了 __call__
特殊方法。
尽管 forward pass 的 recipe 需要在此函数中定义,但应该在之后调用 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) — Model configuration class with all the parameters of the model. Initializing with a config file does not load the weights associated with the model, only the configuration. Check out the from_pretrained() method to load the model weights.
ViTMAE 模型转换器,顶部带有用于自监督预训练的解码器。
请注意,我们在 examples directory 中提供了一个脚本,用于在自定义数据上预训练此模型。
此模型是 PyTorch torch.nn.Module 子类。像使用常规 PyTorch 模块一样使用它,并查阅 PyTorch 文档以了解所有与通用用法和行为相关的事项。
forward
< 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
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)
,可选) — 用于置空自注意力模块中选定头的掩码。掩码值在[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 (
torch.FloatTensor
,形状为(1,)
) — 像素重建损失。 - logits (
torch.FloatTensor
,形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建 logits。 - mask (
torch.FloatTensor
,形状为(batch_size, sequence_length)
) — Tensor,指示哪些 patches 被 mask (1),哪些没有被 mask (0)。 - ids_restore (
torch.LongTensor
,形状为(batch_size, sequence_length)
) — Tensor,包含 (shuffled) masked patches 的原始索引。 - hidden_states (
tuple(torch.FloatTensor)
, optional, 当传递output_hidden_states=True
或当config.output_hidden_states=True
时返回) —torch.FloatTensor
的 Tuple (embeddings 的输出一个,每个层的输出一个),形状为(batch_size, sequence_length, hidden_size)
。 模型在每一层输出端的 Hidden-states 加上初始 embedding 输出。 - attentions (
tuple(torch.FloatTensor)
, optional, 当传递output_attentions=True
或当config.output_attentions=True
时返回) —torch.FloatTensor
的 Tuple (每层一个),形状为(batch_size, num_heads, sequence_length, sequence_length)
。 attention softmax 之后的 Attention 权重,用于计算 self-attention heads 中的加权平均值。
ViTMAEForPreTraining 前向方法,覆盖了 __call__
特殊方法。
尽管 forward pass 的 recipe 需要在此函数中定义,但应该在之后调用 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 模型转换器,输出原始隐藏状态,顶部没有任何特定的头。此模型继承自 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.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 (
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。 - 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 (
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
时返回) —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 前向方法,覆盖了 __call__
特殊方法。
尽管 forward pass 的 recipe 需要在此函数中定义,但应该在之后调用 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
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 (
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。 - 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 (
tf.Tensor
,形状为(1,)
) — 像素重建损失。 - logits (
tf.Tensor
,形状为(batch_size, sequence_length, patch_size ** 2 * num_channels)
) — 像素重建 logits。 - 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
时返回) —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__
特殊方法。
尽管 forward pass 的 recipe 需要在此函数中定义,但应该在之后调用 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