# RFD4ProteinaAutoencoder

[RFD4-Proteína](../pipelines/rfd4_proteina) 的自编码器。`encode` 将 atom37 坐标映射为每个 token 的局部潜在变量，而 `decode` 则将潜在变量和骨架位置还原为 atom37 结构和残基身份。它在流水线中注册为 `vae`。

```py
from diffusers import RFD4ProteinaAutoencoder

vae = RFD4ProteinaAutoencoder.from_pretrained("nvidia/RFD4-Proteina-Diffusers", subfolder="vae")
```

## RFD4ProteinaAutoencoder[[diffusers.RFD4ProteinaAutoencoder]]

#### diffusers.RFD4ProteinaAutoencoder[[diffusers.RFD4ProteinaAutoencoder]]

```python
diffusers.RFD4ProteinaAutoencoder(atom37_mask: collections.abc.Sequence[collections.abc.Sequence[bool]], allowed_residue_types: collections.abc.Sequence[collections.abc.Sequence[bool]], latent_dim: int = 32, n_residue_types: int = 147, num_token_types: int = 7, nlayers: int = 12, token_dim: int = 768, nheads: int = 12, dim_cond: int = 128, pair_repr_dim: int = 256, token_type_emb_dim: int = 32, encoder_feats_seq: tuple[str, ...] = ('token_type', 'x1_a37coors_nm', 'x1_a37coors_nm_rel', 'chain_idx_seq', 'incident_bond_type_counts', 'atom37_element_charge_embedding'), decoder_feats_seq: tuple[str, ...] = ('ca_coors_nm', 'z_latent_seq', 'token_type', 'cond_residue_type'))
```

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

**参数：**

latent_dim (`int`，默认为 `32`)：每个 token 的局部潜在表示的宽度。

n_residue_types (`int`，默认为 `147`)：残基词汇表大小。

num_token_types (`int`，默认为 `7`)：token 类型词汇表的大小：蛋白质、RNA、DNA、原子化、未知、糖链和非标准氨基酸。

allowed_residue_types (`list[list[bool]]`) : `(num_token_types, n_residue_types)` 表格，表示每种 token 类型可能解码到的残基类别。

nlayers (`int`，默认为 `12`)：编码器和解码器中各自的 trunk 层数。

token_dim (`int`，默认为 `768`)：Token 表示的宽度。

nheads (`int`，默认为 `12`)：每层的注意力头数。

dim_cond (`int`，默认为 `128`)：（未使用的、全零的）条件向量的宽度。

pair_repr_dim (`int`，默认值为 `256`) : 用于构建主干层的 pair width。发布的 autoencoder 不使用 pair bias，因此该参数不包含任何可学习参数。

token_type_emb_dim (`int`，默认为 `32`)：Token 类型嵌入的宽度。

encoder_feats_seq, decoder_feats_seq (`list[str]`) : 投影到编码器和解码器输入中的特征。

atom37_mask (`list[list[bool]]`) : 每种残基类型的有效 atom37 槽位，形状为 `(n_residue_types, 37)`。

配对的分子编码器和 atom37 解码器。

提供给该模型以及由该模型返回的坐标单位为纳米。

#### encode[[diffusers.RFD4ProteinaAutoencoder.encode]]

```python
encode(coords_nm: Tensor, padding_mask: Tensor, token_type: typing.Optional[torch.Tensor] = None, atom37_mask: typing.Optional[torch.Tensor] = None, conditioning: dict[str, typing.Any] | None = None, generator: typing.Union[torch.Generator, list[torch.Generator], NoneType] = None, return_dict: bool = True)
```

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

**参数：**

coords_nm (`torch.Tensor`) : `(batch, tokens, 37, 3)` 以纳米为单位的 atom37 坐标。

padding_mask (`torch.Tensor`) : `(batch, tokens)`，其中为 true 的位置表示该 token 是真实 token 而非填充。

token_type (`torch.Tensor`, *可选*) : `(batch, tokens)` 的 token 类型编码。

atom37_mask (`torch.Tensor`, *可选*) : `(batch, tokens, 37)`，原子槽位被使用时为 true。

conditioning (`dict[str, Any]`，*可选*)：预处理器输出的键所对应的其余拓扑和条件张量。

generator (`torch.Generator` 或 `list[torch.Generator]`，*可选*)：为每个批次行指定一个生成器，以生成独立的随机潜在样本。若未指定，则从全局随机流中采样。

return_dict (`bool`，默认为 `True`)：返回带类型的输出，或返回其字段的元组。

**返回：** `RFD4ProteinaEncoderOutput` 或 `tuple`

形状为 `(batch, tokens, latent_dim)` 的潜在、均值和对数尺度张量。

将准备好的坐标和条件编码为采样的逐 token 局部潜在变量。

#### decode[[diffusers.RFD4ProteinaAutoencoder.decode]]

```python
decode(z_latent: Tensor, ca_coors_nm: Tensor, padding_mask: Tensor, token_type: typing.Optional[torch.Tensor] = None, atom37_mask: typing.Optional[torch.Tensor] = None, conditioning: dict[str, typing.Any] | None = None, return_dict: bool = True)
```

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

**参数：**

z_latent (`torch.Tensor`) : `(batch, tokens, latent_dim)` 每个 token 的局部潜在表示。

ca_coors_nm (`torch.Tensor`) : `(batch, tokens, 3)` 骨干 CA 位置，单位为纳米。

padding_mask (`torch.Tensor`) : `(batch, tokens)`，其中为 true 的位置表示该 token 是真实 token 而非填充。

token_type (`torch.Tensor`, *可选*) : `(batch, tokens)` 的 token 类型编码。

atom37_mask (`torch.Tensor`, *可选*) : `(batch, tokens, 37)`，原子槽位被使用时为 true。

conditioning (`dict[str, Any]`，*可选*)：预处理器输出的其余拓扑和条件张量，位于预处理器生成的键下。序列条件将从此处读取。

return_dict (`bool`，默认为 `True`)：返回带类型的输出，或返回其字段的元组。

**返回：** `RFD4ProteinaDecoderOutput` 或 `tuple`

以纳米为单位的坐标 `(batch, tokens, 37, 3)`、残基类型 `(batch, tokens)`、发射掩码 `(batch, tokens)` 和原子掩码 `(batch, tokens, 37)`。未发射原子的坐标为零。

将每个 token 的潜在变量和主干位置解码为 atom37 结构。

#### forward[[diffusers.RFD4ProteinaAutoencoder.forward]]

```python
forward(z_latent: Tensor, ca_coors_nm: Tensor, padding_mask: Tensor, token_type: typing.Optional[torch.Tensor] = None, atom37_mask: typing.Optional[torch.Tensor] = None, conditioning: dict[str, typing.Any] | None = None, return_dict: bool = True)
```

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

**参数：**

z_latent (`torch.Tensor`) : `(batch, tokens, latent_dim)` 每个 token 的局部潜在表示。

ca_coors_nm (`torch.Tensor`) : `(batch, tokens, 3)` 骨干 CA 位置，单位为纳米。

padding_mask (`torch.Tensor`) : `(batch, tokens)`，其中为 true 的位置表示该 token 是真实 token 而非填充。

token_type (`torch.Tensor`, *可选*) : `(batch, tokens)` 的 token 类型编码。

atom37_mask (`torch.Tensor`, *可选*) : `(batch, tokens, 37)`，原子槽位被使用时为 true。

conditioning (`dict[str, Any]`，*可选*)：其余的拓扑和条件张量。

return_dict (`bool`，默认为 `True`)：返回带类型的输出，或返回其字段的元组。

**返回：** `RFD4ProteinaDecoderOutput` 或 `tuple`

解码后的坐标、残基类型以及原子/发射掩码。

解码每个 token 的潜在表示和主干位置；等效于调用 [decode()](/docs/diffusers/v0.43.0/zh/api/models/rfd4_proteina_autoencoder#diffusers.RFD4ProteinaAutoencoder.decode)。

## RFD4ProteinaEncoderOutput[[diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaEncoderOutput]]

#### diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaEncoderOutput[[diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaEncoderOutput]]

```python
diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaEncoderOutput(latent: Tensor, mean: typing.Optional[torch.Tensor] = None, log_scale: typing.Optional[torch.Tensor] = None)
```

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

**参数：**

latent (`torch.Tensor`) : 采样 `mean + noise * exp(log_scale)`，在已生成的潜在 token 之外为零。

mean (`torch.Tensor`) : 高斯均值，在已生成的潜在 token 之外为零。

log_scale (`torch.Tensor`) : 对数标准差，在生成的潜在 token 之外为零。

采样的潜在变量和高斯参数，每个的形状均为 `(batch, tokens, latent_dim)`。

## RFD4ProteinaDecoderOutput[[diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaDecoderOutput]]

#### diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaDecoderOutput[[diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaDecoderOutput]]

```python
diffusers.models.autoencoders.autoencoder_rfd4_proteina.RFD4ProteinaDecoderOutput(coordinates: Tensor, residue_type: typing.Optional[torch.Tensor] = None, emit_mask: typing.Optional[torch.Tensor] = None, atom_mask: typing.Optional[torch.Tensor] = None)
```

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

**参数：**

coordinates (`torch.Tensor`) : 以纳米为单位的坐标 `(batch, tokens, 37, 3)`；未发射的原子为零。

residue_type (`torch.Tensor`) : 形状为 `(batch, tokens)` 的残基词汇索引。

emit_mask (`torch.Tensor`) : 形状为 `(batch, tokens)` 的布尔型已生成 token 掩码。

atom_mask (`torch.Tensor`) : 形状为 `(batch, tokens, 37)` 的布尔值有效原子掩码。

解码后的分子坐标和离散 atom37 拓扑结构。

