Transformers 文档
自定义层和实用程序
并获得增强的文档体验
开始使用
自定义层和实用程序
此页面列出了库中使用的所有自定义层,以及它为建模提供的实用函数和类。
这些大部分只有在您研究库中的模型代码时才有用。
层
带梯度检查点的层基类。
此类为层启用梯度检查点功能。默认情况下,梯度检查点功能是禁用的 (gradient_checkpointing = False
)。当调用 model.set_gradient_checkpointing()
时,通过设置 gradient_checkpointing = True
并将检查点函数分配给 _gradient_checkpointing_func
来启用梯度检查点功能。
重要提示
当使用 `use_reentrant=True` 的梯度检查点时,需要梯度的输入(例如隐藏状态)必须作为位置参数(`*args`)而不是关键字参数传递,以正确传播梯度。
注意力函数
字典式对象,用于跟踪允许的注意力函数。您可以通过调用 `register()` 轻松添加新的注意力函数。如果模型需要本地覆盖现有的注意力函数(例如 `sdpa`),它需要在 `modeling_
注意力掩码函数
旋转位置嵌入函数
如果模型使用动态 RoPE(即在前向传播中可能重新计算其频率的 RoPE 实现),则用于在前向传播中更新 RoPE 参数的装饰器函数。
PyTorch 自定义模块
由 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
此函数将 `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]
找到头及其索引,同时考虑到 `already_pruned_heads`。
transformers.prune_layer
< 源 >( layer: nn.Linear | Conv1D index: torch.LongTensor dim: int | None = None ) → torch.nn.Linear
或 Conv1D
参数
- layer (
Union[torch.nn.Linear, Conv1D]
) — 要修剪的层。 - index (
torch.LongTensor
) — 要在层中保留的索引。 - dim (
int
, 可选) — 要保留索引的维度。
返回
torch.nn.Linear
或 Conv1D
修剪后的层作为具有 `requires_grad=True` 的新层。
修剪 Conv1D 或线性层以仅保留索引中的条目。
用于删除头。
transformers.pytorch_utils.prune_conv1d_layer
< 源 >( layer: Conv1D index: torch.LongTensor dim: int = 1 ) → Conv1D
修剪 Conv1D 层以仅保留索引中的条目。Conv1D 的工作方式类似于线性层(参见 BERT),但权重是转置的。
用于删除头。
transformers.pytorch_utils.prune_linear_layer
< 源 >( layer: nn.Linear index: torch.LongTensor dim: int = 0 ) → torch.nn.Linear
修剪线性层以仅保留索引中的条目。
用于删除头。
TensorFlow 自定义层
class transformers.modeling_tf_utils.TFConv1D
< 源 >( nf nx initializer_range = 0.02 **kwargs )
由 Radford 等人定义的用于 OpenAI GPT(也用于 GPT-2)的 1D 卷积层。
基本功能与线性层相同,但权重是转置的。
class transformers.TFSequenceSummary
< source >( 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 损失函数
适用于因果语言建模 (CLM) 的损失函数,即猜测下一个词元(token)的任务。
在损失计算中,任何值为 -100 的标签都将被忽略(连同相应的 logits)。
适用于掩码语言建模 (MLM) 的损失函数,即猜测被掩码词元的任务。
在损失计算中,任何值为 -100 的标签都将被忽略(连同相应的 logits)。
适用于多项选择任务的损失函数。
适用于问答任务的损失函数。
适用于序列分类的损失函数。
适用于词元分类的损失函数。
在损失计算中,任何值为 -100 的标签都将被忽略(连同相应的 logits)。
TensorFlow 辅助函数
transformers.modeling_tf_utils.get_initializer
< source >( initializer_range: float = 0.02 ) → keras.initializers.TruncatedNormal
使用给定范围创建 keras.initializers.TruncatedNormal
。
transformers.modeling_tf_utils.keras_serializable
< source >( )
装饰 Keras 层类以支持 Keras 序列化。
这是通过以下方式完成的:
- 在
get_config
中(由 Keras 在序列化时调用)向 Keras 配置字典添加一个transformers_config
字典。 - 包装
__init__
以接受该transformers_config
字典(由 Keras 在反序列化时传递),并将其转换为用于实际层初始化器的配置对象。 - 在 Keras 中将该类注册为自定义对象(如果 Tensorflow 版本支持此功能),因此在调用
keras.models.load_model
时不需要在custom_objects
中提供它。
transformers.shape_list
< source >( tensor: typing.Union[tensorflow.python.framework.tensor.Tensor, numpy.ndarray] ) → list[int]
干净地处理 TensorFlow 中的动态形状。