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 中的動態形狀。