# Transformer2DModel

来自 [CompVis](https://huggingface.co/CompVis) 的用于类图像数据的 Transformer 模型，基于 Dosovitskiy 等人提出的 [Vision Transformer](https://huggingface.co/papers/2010.11929)。[Transformer2DModel](/docs/diffusers/v0.43.0/zh/api/models/transformer2d#diffusers.Transformer2DModel) 接受离散（向量嵌入的类别）或连续（实际嵌入）输入。

当输入为**连续**时：

1. 将输入进行投影，并将其重塑为 `(batch_size, sequence_length, feature_dimension)`。
2. 以标准方式应用 Transformer 块。
3. 重塑为图像。

当输入为**离散**时：

> [!TIP]
> 假设其中一个输入类别是掩码潜在像素。未加噪图像的预测类别中不包含对掩码像素的预测，因为未加噪图像无法被掩码。

1. 将输入（潜在像素的类别）转换为嵌入，并应用位置嵌入。
2. 以标准方式应用 Transformer 块。
3. 预测未加噪图像的类别。

## Transformer2DModel[[diffusers.Transformer2DModel]]

#### diffusers.Transformer2DModel[[diffusers.Transformer2DModel]]

```python
diffusers.Transformer2DModel(num_attention_heads: int = 16, attention_head_dim: int = 88, in_channels: int | None = None, out_channels: int | None = None, num_layers: int = 1, dropout: float = 0.0, norm_num_groups: int = 32, cross_attention_dim: int | None = None, attention_bias: bool = False, sample_size: int | None = None, num_vector_embeds: int | None = None, patch_size: int | None = None, activation_fn: str = 'geglu', num_embeds_ada_norm: int | None = None, use_linear_projection: bool = False, only_cross_attention: bool = False, double_self_attention: bool = False, upcast_attention: bool = False, norm_type: str = 'layer_norm', norm_elementwise_affine: bool = True, norm_eps: float = 1e-05, attention_type: str = 'default', caption_channels: int = None, interpolation_scale: float = None, use_additional_conditions: bool | None = None)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_2d.py#L39)

**参数：**

num_attention_heads (`int`，*可选*，默认为 16)：用于多头注意力的头数。

attention_head_dim (`int`，*可选*，默认值为 88)：每个头中的通道数。

in_channels (`int`，*可选*)：输入和输出的通道数（如果输入是**连续**的，请指定）。

num_layers (`int`，*可选*，默认为 1)：要使用的 Transformer 块层数。

dropout (`float`，*可选*，默认值为 0.0)：要使用的 dropout 概率。

cross_attention_dim (`int`, *可选*) : 要使用的 `encoder_hidden_states` 维度数量。

sample_size (`int`，*可选*)：潜在图像的宽度（如果输入为**discrete**，则需指定）。由于该值用于学习位置嵌入的数量，因此在训练过程中是固定的。

num_vector_embeds (`int`, *可选*)：潜在像素向量嵌入的类别数（如果输入是**离散**的，请指定）。包括被掩码的潜在像素的类别。

activation_fn (`str`，*可选*，默认为 `"geglu"`)：前馈层中使用的激活函数。

num_embeds_ada_norm ( `int`, *optional*) : 训练期间使用的扩散步数。如果至少有一个 norm_layers 是 `AdaLayerNorm`，则需传入此参数。由于该值用于确定要学习并添加到隐藏状态中的嵌入数量，因此在训练期间是固定的。在推理阶段，去噪的步数可以少于 `num_embeds_ada_norm`，但不能超过该值。

attention_bias (`bool`，*可选*)：配置 `TransformerBlocks` 的注意力机制是否包含偏置参数。

用于类图像数据的 2D Transformer 模型。

#### forward[[diffusers.Transformer2DModel.forward]]

```python
forward(hidden_states: Tensor, encoder_hidden_states: typing.Optional[torch.Tensor] = None, timestep: typing.Optional[torch.LongTensor] = None, added_cond_kwargs: dict[str, torch.Tensor] = None, class_labels: typing.Optional[torch.LongTensor] = None, cross_attention_kwargs: dict[str, typing.Any] = None, attention_mask: typing.Optional[torch.Tensor] = None, encoder_attention_mask: typing.Optional[torch.Tensor] = None, return_dict: bool = True)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/transformers/transformer_2d.py#L324)

**参数：**

hidden_states （如果为离散值，则为形状为 `(batch size, num latent pixels)` 的 `torch.LongTensor`；如果为连续值，则为形状为 `(batch size, channel, height, width)` 的 `torch.Tensor`）：输入 `hidden_states`。

encoder_hidden_states ( `torch.Tensor`，形状为 `(batch size, sequence len, embed dims)`，*可选*)：用于交叉注意力层的条件嵌入。如果未提供，交叉注意力将默认为自注意力。

timestep ( `torch.LongTensor`, *可选*) : 用于指示去噪步骤。作为嵌入应用于 `AdaLayerNorm` 的可选时间步。

class_labels ( `torch.LongTensor`，形状为 `(batch size, num classes)`，*可选*)：用于指示类别标签条件。可选的类别标签，将作为嵌入应用于 `AdaLayerZeroNorm`。

cross_attention_kwargs ( `dict[str, Any]`，*可选*)：一个 kwargs 字典，如果指定，将作为参数传递给 [diffusers.models.attention_processor](https://github.com/huggingface/diffusers/blob/main/src/diffusers/models/attention_processor.py) 中 `self.processor` 下定义的 `AttentionProcessor`。

attention_mask ( `torch.Tensor`, *可选*) : 形状为 `(batch, key_tokens)` 的注意力掩码将应用于 `encoder_hidden_states`。如果值为 `1`，则保留该掩码；如果值为 `0`，则丢弃该掩码。掩码将被转换为偏置，向对应于“丢弃”标记的注意力分数添加较大的负值。

encoder_attention_mask ( `torch.Tensor`, *可选*) : 应用于 `encoder_hidden_states` 的交叉注意力掩码。支持两种格式：  * 掩码 `(batch, sequence_length)`，True = 保留，False = 丢弃。 * 偏置 `(batch, 1, sequence_length)`，0 = 保留，-10000 = 丢弃。  如果 `ndim == 2`：将被解释为掩码，然后转换为与上述格式一致的偏置。该偏置将被加到交叉注意力分数上。

return_dict (`bool`，*可选*，默认为 `True`)：是否返回 [UNet2DConditionOutput](/docs/diffusers/v0.43.0/zh/api/models/unet2d-cond#diffusers.models.unets.unet_2d_condition.UNet2DConditionOutput) 而不是普通元组。

**返回值：**

如果 `return_dict` 为 True，则返回 `Transformer2DModelOutput`，否则返回一个 `tuple`，其中第一个元素是样本张量。

[Transformer2DModel](/docs/diffusers/v0.43.0/zh/api/models/transformer2d#diffusers.Transformer2DModel) 的前向方法。

## Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

#### diffusers.models.modeling_outputs.Transformer2DModelOutput[[diffusers.models.modeling_outputs.Transformer2DModelOutput]]

```python
diffusers.models.modeling_outputs.Transformer2DModelOutput(sample: torch.Tensor)
```

[源代码](https://github.com/huggingface/diffusers/blob/v0.43.0/src/diffusers/models/modeling_outputs.py#L21)

**参数：**

sample (`torch.Tensor`，形状为 `(batch_size, num_channels, height, width)`；若 [Transformer2DModel](/docs/diffusers/v0.43.0/zh/api/models/transformer2d#diffusers.Transformer2DModel) 为离散模式，则为 `(batch size, num_vector_embeds - 1, num_latent_pixels)`)：以 `encoder_hidden_states` 输入为条件的隐藏状态输出。若为离散模式，则返回未加噪潜在像素的概率分布。

[Transformer2DModel](/docs/diffusers/v0.43.0/zh/api/models/transformer2d#diffusers.Transformer2DModel) 的输出。

