Transformers 文档

自定义层和实用程序

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

自定义层和实用程序

此页面列出了库中使用的所有自定义层,以及它为建模提供的实用函数和类。

这些大部分只有在您研究库中的模型代码时才有用。

class transformers.GradientCheckpointingLayer

< >

( *args **kwargs )

带梯度检查点的层基类。

此类为层启用梯度检查点功能。默认情况下,梯度检查点功能是禁用的 (gradient_checkpointing = False)。当调用 model.set_gradient_checkpointing() 时,通过设置 gradient_checkpointing = True 并将检查点函数分配给 _gradient_checkpointing_func 来启用梯度检查点功能。

重要提示

当使用 `use_reentrant=True` 的梯度检查点时,需要梯度的输入(例如隐藏状态)必须作为位置参数(`*args`)而不是关键字参数传递,以正确传播梯度。

示例

>>> # Correct - hidden_states passed as positional arg
>>> out = self.layer(hidden_states, attention_mask=attention_mask)

>>> # Incorrect - hidden_states passed as keyword arg
>>> out = self.layer(hidden_states=hidden_states, attention_mask=attention_mask)

注意力函数

class transformers.AttentionInterface

< >

( )

字典式对象,用于跟踪允许的注意力函数。您可以通过调用 `register()` 轻松添加新的注意力函数。如果模型需要本地覆盖现有的注意力函数(例如 `sdpa`),它需要在 `modeling_.py` 中声明此类的新实例,并在该实例上声明它。

注册

< >

( key: str value: typing.Callable )

注意力掩码函数

class transformers.AttentionMaskInterface

< >

( )

注册

< >

( key: str value: typing.Callable )

旋转位置嵌入函数

transformers.dynamic_rope_update

< >

( rope_forward )

参数

  • rope_forward (可调用) — RoPE 实现的前向传播。

如果模型使用动态 RoPE(即在前向传播中可能重新计算其频率的 RoPE 实现),则用于在前向传播中更新 RoPE 参数的装饰器函数。

PyTorch 自定义模块

class transformers.Conv1D

< >

( nf nx )

参数

  • nf (int) — 输出特征的数量。
  • nx (int) — 输入特征的数量。

由 Radford 等人定义的用于 OpenAI GPT(也用于 GPT-2)的 1D 卷积层。

基本功能与线性层相同,但权重是转置的。

PyTorch 辅助函数

transformers.apply_chunking_to_forward

< >

( forward_fn: Callable[..., torch.Tensor] chunk_size: int chunk_dim: int *input_tensors ) torch.Tensor

参数

  • forward_fn (Callable[..., torch.Tensor]) — 模型的前向函数。
  • chunk_size (int) — 分块张量的大小:num_chunks = len(input_tensors[0]) / chunk_size
  • chunk_dim (int) — input_tensors 应分块的维度。
  • input_tensors (tuple[torch.Tensor]) — forward_fn 的输入张量,将进行分块

返回

torch.Tensor

一个张量,其形状与直接应用 `forward_fn` 得到的形状相同。

此函数将 `input_tensors` 沿着 `chunk_dim` 维度分块成大小为 `chunk_size` 的较小输入张量部分。然后,它独立地将 `forward_fn` 层应用于每个分块以节省内存。

如果 `forward_fn` 在 `chunk_dim` 上是独立的,则此函数将产生与直接将 `forward_fn` 应用于 `input_tensors` 相同的结果。

示例

# rename the usual forward() fn to forward_chunk()
def forward_chunk(self, hidden_states):
    hidden_states = self.decoder(hidden_states)
    return hidden_states


# implement a chunked forward function
def forward(self, hidden_states):
    return apply_chunking_to_forward(self.forward_chunk, self.chunk_size_lm_head, self.seq_len_dim, hidden_states)

transformers.pytorch_utils.find_pruneable_heads_and_indices

< >

( heads: list[int] n_heads: int head_size: int already_pruned_heads: set[int] ) tuple[Set[int], torch.LongTensor]

参数

  • heads (list[int]) — 要修剪的头的索引列表。
  • n_heads (int) — 模型中的头数。
  • head_size (int) — 每个头的大小。
  • already_pruned_heads (Set[int]) — 已修剪头的集合。

返回

tuple[Set[int], torch.LongTensor]

一个元组,包含要修剪的头索引(考虑到 `already_pruned_heads`)和要在层权重中保留的行/列索引。

找到头及其索引,同时考虑到 `already_pruned_heads`。

transformers.prune_layer

< >

( layer: nn.Linear | Conv1D index: torch.LongTensor dim: int | None = None ) torch.nn.LinearConv1D

参数

  • layer (Union[torch.nn.Linear, Conv1D]) — 要修剪的层。
  • index (torch.LongTensor) — 要在层中保留的索引。
  • dim (int, 可选) — 要保留索引的维度。

返回

torch.nn.LinearConv1D

修剪后的层作为具有 `requires_grad=True` 的新层。

修剪 Conv1D 或线性层以仅保留索引中的条目。

用于删除头。

transformers.pytorch_utils.prune_conv1d_layer

< >

( layer: Conv1D index: torch.LongTensor dim: int = 1 ) Conv1D

参数

  • layer (Conv1D) — 要修剪的层。
  • index (torch.LongTensor) — 要在层中保留的索引。
  • dim (int, 可选, 默认为 1) — 要保留索引的维度。

返回

Conv1D

修剪后的层作为具有 `requires_grad=True` 的新层。

修剪 Conv1D 层以仅保留索引中的条目。Conv1D 的工作方式类似于线性层(参见 BERT),但权重是转置的。

用于删除头。

transformers.pytorch_utils.prune_linear_layer

< >

( layer: nn.Linear index: torch.LongTensor dim: int = 0 ) torch.nn.Linear

参数

  • layer (torch.nn.Linear) — 要修剪的层。
  • index (torch.LongTensor) — 要在层中保留的索引。
  • dim (int, 可选, 默认为 0) — 要保留索引的维度。

返回

torch.nn.Linear

修剪后的层作为具有 `requires_grad=True` 的新层。

修剪线性层以仅保留索引中的条目。

用于删除头。

TensorFlow 自定义层

class transformers.modeling_tf_utils.TFConv1D

< >

( nf nx initializer_range = 0.02 **kwargs )

参数

  • nf (int) — 输出特征的数量。
  • nx (int) — 输入特征的数量。
  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化权重的标准差。
  • kwargs (dict[str, Any], 可选) — 传递给 keras.layers.Layer__init__ 的额外关键字参数。

由 Radford 等人定义的用于 OpenAI GPT(也用于 GPT-2)的 1D 卷积层。

基本功能与线性层相同,但权重是转置的。

class transformers.TFSequenceSummary

< >

( config: PretrainedConfig initializer_range: float = 0.02 **kwargs )

参数

  • config (PretrainedConfig) — 模型使用的配置。模型配置类中的相关参数(请参考您模型的实际配置类以获取其使用的默认值)是:

    • summary_type (str) — 用于生成此摘要的方法。可接受的值为:

      • "last" — 取最后一个令牌的隐藏状态(如 XLNet)
      • "first" — 取第一个令牌的隐藏状态(如 Bert)
      • "mean" — 取所有令牌隐藏状态的平均值
      • "cls_index" — 提供分类令牌位置的张量 (GPT/GPT-2)
      • "attn" — 当前未实现,使用多头注意力
    • summary_use_proj (bool) — 在向量提取后添加一个投影。

    • summary_proj_to_labels (bool) — 如果为 True,投影输出到 config.num_labels 类(否则到 config.hidden_size)。

    • summary_activation (Optional[str]) — 设置为 "tanh" 以向输出添加 tanh 激活,其他字符串或 None 将不添加激活。

    • summary_first_dropout (float) — 投影和激活之前的可选 dropout 概率。

    • summary_last_dropout (float)— 投影和激活之后的可选 dropout 概率。

  • initializer_range (float, 可选, 默认为 0.02) — 用于初始化权重的标准差。
  • kwargs (dict[str, Any], 可选) — 传递给 keras.layers.Layer__init__ 的额外关键字参数。

计算序列隐藏状态的单个向量摘要。

TensorFlow 损失函数

class transformers.modeling_tf_utils.TFCausalLanguageModelingLoss

< >

( )

适用于因果语言建模 (CLM) 的损失函数,即猜测下一个词元(token)的任务。

在损失计算中,任何值为 -100 的标签都将被忽略(连同相应的 logits)。

class transformers.modeling_tf_utils.TFMaskedLanguageModelingLoss

< >

( )

适用于掩码语言建模 (MLM) 的损失函数,即猜测被掩码词元的任务。

在损失计算中,任何值为 -100 的标签都将被忽略(连同相应的 logits)。

class transformers.modeling_tf_utils.TFMultipleChoiceLoss

< >

( )

适用于多项选择任务的损失函数。

class transformers.modeling_tf_utils.TFQuestionAnsweringLoss

< >

( )

适用于问答任务的损失函数。

class transformers.modeling_tf_utils.TFSequenceClassificationLoss

< >

( )

适用于序列分类的损失函数。

class transformers.modeling_tf_utils.TFTokenClassificationLoss

< >

( )

适用于词元分类的损失函数。

在损失计算中,任何值为 -100 的标签都将被忽略(连同相应的 logits)。

TensorFlow 辅助函数

transformers.modeling_tf_utils.get_initializer

< >

( initializer_range: float = 0.02 ) keras.initializers.TruncatedNormal

参数

  • initializer_range (float, 默认为 0.02) — 初始化范围的标准差。

返回

keras.initializers.TruncatedNormal

截断正态分布初始化器。

使用给定范围创建 keras.initializers.TruncatedNormal

transformers.modeling_tf_utils.keras_serializable

< >

( )

参数

  • cls (一个 keras.layers.Layers 子类) — 在本项目中通常是 TF.MainLayer 类,通常必须接受 config 参数作为其初始化器。

装饰 Keras 层类以支持 Keras 序列化。

这是通过以下方式完成的:

  1. get_config 中(由 Keras 在序列化时调用)向 Keras 配置字典添加一个 transformers_config 字典。
  2. 包装 __init__ 以接受该 transformers_config 字典(由 Keras 在反序列化时传递),并将其转换为用于实际层初始化器的配置对象。
  3. 在 Keras 中将该类注册为自定义对象(如果 Tensorflow 版本支持此功能),因此在调用 keras.models.load_model 时不需要在 custom_objects 中提供它。

transformers.shape_list

< >

( tensor: typing.Union[tensorflow.python.framework.tensor.Tensor, numpy.ndarray] ) list[int]

参数

  • tensor (tf.Tensornp.ndarray) — 我们想要获取形状的张量。

返回

list[int]

张量的形状作为列表。

干净地处理 TensorFlow 中的动态形状。

< > 在 GitHub 上更新