Transformers 文件
Perceiver
並獲得增強的文件體驗
開始使用
Perceiver
概述
Perceiver IO 模型由 Andrew Jaegle, Sebastian Borgeaud, Jean-Baptiste Alayrac, Carl Doersch, Catalin Ionescu, David Ding, Skanda Koppula, Daniel Zoran, Andrew Brock, Evan Shelhamer, Olivier Hénaff, Matthew M. Botvinick, Andrew Zisserman, Oriol Vinyals, João Carreira 在 Perceiver IO: A General Architecture for Structured Inputs & Outputs 中提出。
Perceiver IO 是 Perceiver 的一個泛化版本,除了能夠處理任意輸入外,還能處理任意輸出。原始 Perceiver 只能生成單一分類標籤。除了分類標籤,Perceiver IO 還可以生成(例如)語言、光流和包含音訊的多模態影片。這使用與原始 Perceiver 相同的構建塊完成。Perceiver IO 的計算複雜度與輸入和輸出大小呈線性關係,大部分處理發生在潛在空間中,這使得我們能夠處理比標準 Transformer 大得多的輸入和輸出。這意味著,例如,Perceiver IO 可以直接使用位元組而不是分詞輸入來進行 BERT 風格的掩碼語言建模。
論文摘要如下:
最近提出的 Perceiver 模型在多個領域(影像、音訊、多模態、點雲)獲得了良好結果,同時計算和記憶體消耗隨輸入大小呈線性擴充套件。雖然 Perceiver 支援多種輸入,但它只能產生非常簡單的輸出,例如類別分數。Perceiver IO 克服了這一限制,同時保留了原始模型的吸引人的特性,透過學習靈活查詢模型的潛在空間來產生任意大小和語義的輸出。Perceiver IO 仍然將模型深度與資料大小解耦,並且仍然與輸入和輸出大小呈線性關係。完整的 Perceiver IO 模型在具有高度結構化輸出空間的任務中取得了強大的結果,例如自然語言和視覺理解、星際爭霸 II,以及多工和多模態領域。值得一提的是,Perceiver IO 在 GLUE 語言基準測試中無需輸入分詞即可與基於 Transformer 的 BERT 基線相媲美,並在 Sintel 光流估計中取得了最先進的效能。
以下是 Perceiver 工作原理的簡要說明
Transformer 的自注意力機制主要問題是時間和記憶體需求與序列長度呈平方關係。因此,BERT 和 RoBERTa 等模型的最大序列長度限制為 512 個 token。Perceiver 旨在解決這個問題,它不在輸入上執行自注意力,而是在一組潛在變數上執行自注意力,並且只使用輸入進行交叉注意力。透過這種方式,時間和記憶體需求不再依賴於輸入的長度,因為使用的潛在變數數量是固定的,例如 256 或 512。這些變數是隨機初始化的,然後使用反向傳播進行端到端訓練。
在內部,PerceiverModel 將建立潛在變數,這是一個形狀為 (batch_size, num_latents, d_latents)
的張量。必須向模型提供 inputs
(可以是文字、影像、音訊,隨你喜歡!),模型將使用它與潛在變數執行交叉注意力。Perceiver 編碼器的輸出是相同形狀的張量。然後,類似於 BERT,可以透過沿序列維度求平均,並在其上方放置一個線性層將 d_latents
投射到 num_labels
,從而將潛在變數的最後隱藏狀態轉換為分類 logits。
這是原始 Perceiver 論文的思想。然而,它只能輸出分類 logits。在後續工作中,PerceiverIO 將其推廣,使模型也能生成任意大小的輸出。你可能會問,怎麼做到的呢?這個想法其實相對簡單:定義任意大小的輸出,然後使用輸出作為查詢,潛在變數作為鍵和值,與潛在變數的最終隱藏狀態進行交叉注意力。
所以,假設你想用 Perceiver 執行掩碼語言建模(BERT 風格)。由於 Perceiver 的輸入長度不會影響自注意力層的計算時間,你可以提供原始位元組,向模型提供長度為 2048 的 inputs
。如果現在掩蓋掉這 2048 個 token 中的某些,可以將 outputs
定義為形狀:(batch_size, 2048, 768)
。接下來,與潛在變數的最終隱藏狀態進行交叉注意力,以更新 outputs
張量。交叉注意力之後,仍然有一個形狀為 (batch_size, 2048, 768)
的張量。然後可以在其上方放置一個常規的語言建模頭,將最後一維投影到模型的詞彙表大小,即建立形狀為 (batch_size, 2048, 262)
的 logits(因為 Perceiver 使用的詞彙表大小為 262 個位元組 ID)。

由於 PyTorch 中的一個 bug,Perceiver 不 支援 torch.nn.DataParallel
,詳情請參閱 issue #36035
資源
- 快速開始使用 Perceiver 的最快方法是檢視 教程筆記本。
- 如果您想完全瞭解模型的工作原理以及在庫中的實現方式,請參閱 部落格文章。請注意,庫中提供的模型只展示了 Perceiver 的一些示例用途。還有更多用例,包括問答、命名實體識別、目標檢測、音訊分類、影片分類等。
- 文字分類任務指南
- 掩碼語言建模任務指南
- 影像分類任務指南
Perceiver 特有輸出
class transformers.models.perceiver.modeling_perceiver.PerceiverModelOutput
< 原始碼 >( logits: typing.Optional[torch.FloatTensor] = None last_hidden_state: typing.Optional[torch.FloatTensor] = None hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None cross_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- logits (
torch.FloatTensor
形狀為(batch_size, num_labels)
) — 分類(如果 config.num_labels==1 則為迴歸)分數(SoftMax 之前)。 - last_hidden_state (
torch.FloatTensor
形狀為(batch_size, sequence_length, hidden_size)
, 可選, 預設為None
) — 模型最後一層的隱藏狀態序列。 - hidden_states (
tuple[torch.FloatTensor]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,每個層輸出一個)形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
- attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均。
- cross_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層在注意力 softmax 後的注意力權重,用於計算交叉注意力頭中的加權平均。
Perceiver 基礎模型輸出的基類,包含潛在隱藏狀態、注意力機制和交叉注意力機制。
class transformers.models.perceiver.modeling_perceiver.PerceiverDecoderOutput
< 原始碼 >( logits: typing.Optional[torch.FloatTensor] = None cross_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- logits (
torch.FloatTensor
形狀為(batch_size, num_labels)
) — 基本解碼器的輸出。 - cross_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層在注意力 softmax 後的注意力權重,用於計算交叉注意力頭中的加權平均。
Perceiver 解碼器輸出的基類,包含潛在交叉注意力機制。
class transformers.models.perceiver.modeling_perceiver.PerceiverMaskedLMOutput
< 原始碼 >( loss: typing.Optional[torch.FloatTensor] = None logits: typing.Optional[torch.FloatTensor] = None hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None cross_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- loss (
torch.FloatTensor
形狀為(1,)
, 可選, 當提供labels
時返回) — 掩碼語言建模(MLM)損失。 - logits (
torch.FloatTensor
形狀為(batch_size, sequence_length, config.vocab_size)
) — 語言建模頭的預測分數(SoftMax 之前每個詞彙 token 的分數)。 - hidden_states (
tuple[torch.FloatTensor]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,每個層輸出一個)形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
- attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均。
- cross_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層在注意力 softmax 後的注意力權重,用於計算交叉注意力頭中的加權平均。
Perceiver 掩碼語言模型輸出的基類。
class transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput
< 原始碼 >( loss: typing.Optional[torch.FloatTensor] = None logits: typing.Optional[torch.FloatTensor] = None hidden_states: typing.Optional[tuple[torch.FloatTensor]] = None attentions: typing.Optional[tuple[torch.FloatTensor]] = None cross_attentions: typing.Optional[tuple[torch.FloatTensor]] = None )
引數
- loss (
torch.FloatTensor
形狀為(1,)
, 可選, 當提供labels
時返回) — 分類(如果 config.num_labels==1 則為迴歸)損失。 - logits (
torch.FloatTensor
形狀為(batch_size, config.num_labels)
) — 分類(如果 config.num_labels==1 則為迴歸)分數(SoftMax 之前)。 - hidden_states (
tuple[torch.FloatTensor]
, 可選, 當傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組(如果模型有嵌入層,則為嵌入層輸出一個,每個層輸出一個)形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
- attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均。
- cross_attentions (
tuple[torch.FloatTensor]
, 可選, 當傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每層一個)形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層在注意力 softmax 後的注意力權重,用於計算交叉注意力頭中的加權平均。
Perceiver 序列/影像分類模型、光流和多模態自動編碼輸出的基類。
PerceiverConfig
class transformers.PerceiverConfig
< 原始碼 >( num_latents = 256 d_latents = 1280 d_model = 768 num_blocks = 1 num_self_attends_per_block = 26 num_self_attention_heads = 8 num_cross_attention_heads = 8 qk_channels = None v_channels = None cross_attention_shape_for_attention = 'kv' self_attention_widening_factor = 1 cross_attention_widening_factor = 1 hidden_act = 'gelu' attention_probs_dropout_prob = 0.1 initializer_range = 0.02 layer_norm_eps = 1e-12 use_query_residual = True vocab_size = 262 max_position_embeddings = 2048 image_size = 56 train_size = [368, 496] num_frames = 16 audio_samples_per_frame = 1920 samples_per_patch = 16 output_shape = [1, 16, 224, 224] output_num_channels = 512 _label_trainable_num_channels = 1024 **kwargs )
引數
- num_latents (
int
, 可選, 預設為 256) — 潛在變數的數量。 - d_latents (
int
, 可選, 預設為 1280) — 潛在嵌入的維度。 - d_model (
int
, 可選, 預設為 768) — 輸入維度。僅在使用 [PerceiverTextPreprocessor] 或未提供預處理器時才應提供。 - num_blocks (
int
, 可選, 預設為 1) — Transformer 編碼器中的塊數。 - num_self_attends_per_block (
int
, 可選, 預設為 26) — 每個塊中的自注意力層數。 - num_self_attention_heads (
int
, 可選, 預設為 8) — Transformer 編碼器中每個自注意力層的注意力頭數。 - num_cross_attention_heads (
int
, 可選, 預設為 8) — Transformer 編碼器中每個交叉注意力層的注意力頭數。 - qk_channels (
int
, 可選) — 在編碼器的交叉注意力和自注意力層中,應用注意力之前用於投射查詢+鍵的維度。如果未指定,將預設為保留查詢的維度。 - v_channels (
int
, 可選) — 在編碼器的交叉注意力和自注意力層中,應用注意力之前用於投射值的維度。如果未指定,將預設為保留查詢的維度。 - cross_attention_shape_for_attention (
str
, 可選, 預設為"kv"
) — 在編碼器的交叉注意力層中,下采樣查詢和鍵時使用的維度。 - self_attention_widening_factor (
int
, 可選, 預設為 1) — Transformer 編碼器交叉注意力層中的前饋層維度。 - cross_attention_widening_factor (
int
, 可選, 預設為 1) — Transformer 編碼器自注意力層中的前饋層維度。 - hidden_act (
str
或function
, 可選, 預設為"gelu"
) — 編碼器和池化器中的非線性啟用函式(函式或字串)。如果為字串,支援"gelu"
、"relu"
、"selu"
和"gelu_new"
。 - attention_probs_dropout_prob (
float
, 可選, 預設為 0.1) — 注意力機率的 dropout 比率。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - layer_norm_eps (
float
, 可選, 預設為 1e-12) — 層歸一化層使用的 epsilon 值。 - use_query_residual (
float
, 可選, 預設為True
) — 是否在編碼器的交叉注意力層中新增查詢殘差。 - vocab_size (
int
, 可選, 預設為 262) — 用於掩碼語言模型詞彙表大小。 - max_position_embeddings (
int
, 可選, 預設為 2048) — 掩碼語言模型可能使用的最大序列長度。通常設定為一個較大值以防萬一(例如,512、1024 或 2048)。 - image_size (
int
, 可選, 預設為 56) — 預處理後圖像的大小,適用於 PerceiverForImageClassificationLearned。 - train_size (
list[int]
, 可選, 預設為[368, 496]
) — 用於光流模型的影像訓練大小。 - num_frames (
int
, 可選, 預設為 16) — 用於多模態自編碼模型的影片幀數。 - audio_samples_per_frame (
int
, 可選, 預設為 1920) — 用於多模態自編碼模型的每幀音訊樣本數。 - samples_per_patch (
int
, 可選, 預設為 16) — 在對多模態自編碼模型的音訊進行預處理時,每個補丁的音訊樣本數。 - output_shape (
list[int]
, 可選, 預設為[1, 16, 224, 224]
) — 多模態自編碼模型影片解碼器查詢的輸出形狀 (batch_size, num_frames, height, width)。這不包括通道維度。 - output_num_channels (
int
, 可選, 預設為 512) — 每個模態解碼器的輸出通道數。
這是用於儲存 PerceiverModel 配置的配置類。它用於根據指定引數例項化 Perceiver 模型,定義模型架構。使用預設值例項化配置將產生與 Perceiver deepmind/language-perceiver 架構相似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關這些方法的更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import PerceiverModel, PerceiverConfig
>>> # Initializing a Perceiver deepmind/language-perceiver style configuration
>>> configuration = PerceiverConfig()
>>> # Initializing a model from the deepmind/language-perceiver style configuration
>>> model = PerceiverModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
PerceiverTokenizer
class transformers.PerceiverTokenizer
< source >( pad_token = '[PAD]' bos_token = '[BOS]' eos_token = '[EOS]' mask_token = '[MASK]' cls_token = '[CLS]' sep_token = '[SEP]' model_max_length = 2048 **kwargs )
引數
- pad_token (
str
, 可選, 預設為"[PAD]"
) — 用於填充的標記,例如在對不同長度的序列進行批處理時。 - bos_token (
str
, 可選, 預設為"[BOS]"
) — BOS 標記(在詞彙表中保留,但實際上未使用)。 - eos_token (
str
, 可選, 預設為"[EOS]"
) — 序列結束標記(在詞彙表中保留,但實際上未使用)。使用特殊標記構建序列時,這不是序列結束使用的標記。使用的標記是
sep_token
。 - mask_token (
str
, 可選, 預設為"[MASK]"
) — MASK 標記,用於掩碼語言模型。 - cls_token (
str
, 可選, 預設為"[CLS]"
) — CLS 標記(在詞彙表中保留,但實際上未使用)。 - sep_token (
str
, 可選, 預設為"[SEP]"
) — 分隔符標記,用於從兩個序列構建序列。
構建 Perceiver 分詞器。Perceiver 僅使用原始位元組 utf-8 編碼。
此分詞器繼承自 PreTrainedTokenizer,其中包含大部分主要方法。使用者應查閱此超類以獲取有關這些方法的更多資訊。
__call__
< source >( text: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair: typing.Union[str, list[str], list[list[str]], NoneType] = None text_target: typing.Union[str, list[str], list[list[str]], NoneType] = None text_pair_target: typing.Union[str, list[str], list[list[str]], NoneType] = None add_special_tokens: bool = True padding: typing.Union[bool, str, transformers.utils.generic.PaddingStrategy] = False truncation: typing.Union[bool, str, transformers.tokenization_utils_base.TruncationStrategy, NoneType] = None max_length: typing.Optional[int] = None stride: int = 0 is_split_into_words: bool = False pad_to_multiple_of: typing.Optional[int] = None padding_side: typing.Optional[str] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None return_token_type_ids: typing.Optional[bool] = None return_attention_mask: typing.Optional[bool] = None return_overflowing_tokens: bool = False return_special_tokens_mask: bool = False return_offsets_mapping: bool = False return_length: bool = False verbose: bool = True **kwargs ) → BatchEncoding
引數
- text (
str
,list[str]
,list[list[str]]
, 可選) — 要編碼的序列或序列批次。每個序列可以是字串或字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True
(以消除與序列批次的歧義)。 - text_pair (
str
,list[str]
,list[list[str]]
, 可選) — 要編碼的序列或序列批次。每個序列可以是字串或字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True
(以消除與序列批次的歧義)。 - text_target (
str
,list[str]
,list[list[str]]
, 可選) — 要編碼為目標文字的序列或序列批次。每個序列可以是字串或字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True
(以消除與序列批次的歧義)。 - text_pair_target (
str
,list[str]
,list[list[str]]
, 可選) — 要編碼為目標文字的序列或序列批次。每個序列可以是字串或字串列表(預分詞字串)。如果序列以字串列表(預分詞)形式提供,則必須設定is_split_into_words=True
(以消除與序列批次的歧義)。 - add_special_tokens (
bool
, 可選, 預設為True
) — 編碼序列時是否新增特殊標記。這將使用底層PretrainedTokenizerBase.build_inputs_with_special_tokens
函式,該函式定義哪些標記自動新增到輸入 ID 中。如果您想自動新增bos
或eos
標記,這會很有用。 - padding (
bool
,str
或 PaddingStrategy, 可選, 預設為False
) — 啟用並控制填充。接受以下值:True
或'longest'
: 填充到批次中最長的序列(如果只提供單個序列則不填充)。'max_length'
: 填充到由max_length
引數指定的最大長度,如果未提供該引數,則填充到模型可接受的最大輸入長度。False
或'do_not_pad'
(預設): 不填充(即,可以輸出序列長度不同的批次)。
- truncation (
bool
,str
或 TruncationStrategy, 可選, 預設為False
) — 啟用並控制截斷。接受以下值:True
或'longest_first'
: 截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將逐個標記截斷,從對中最長的序列中刪除一個標記。'only_first'
: 截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷對中的第一個序列。'only_second'
: 截斷到由max_length
引數指定的最大長度,如果未提供該引數,則截斷到模型可接受的最大輸入長度。如果提供一對序列(或批次),這將只截斷對中的第二個序列。False
或'do_not_truncate'
(預設): 不截斷(即,可以輸出序列長度大於模型最大可接受輸入大小的批次)。
- max_length (
int
, 可選) — 控制截斷/填充引數之一使用的最大長度。如果未設定或設定為
None
,這將使用預定義的模型最大長度(如果截斷/填充引數之一需要最大長度)。如果模型沒有特定的最大輸入長度(如 XLNet),則截斷/填充到最大長度將被停用。 - stride (
int
, 可選, 預設為 0) — 如果與max_length
一起設定為某個數字,則當return_overflowing_tokens=True
時返回的溢位標記將包含來自截斷序列末尾的一些標記,以在截斷序列和溢位序列之間提供一些重疊。此引數的值定義重疊標記的數量。 - is_split_into_words (
bool
, 可選, 預設為False
) — 輸入是否已經預分詞(例如,按單詞分割)。如果設定為True
,分詞器假定輸入已按單詞分割(例如,透過按空格分割),然後會將其分詞。這對於 NER 或標記分類很有用。 - pad_to_multiple_of (
int
, 可選) — 如果設定,將把序列填充到提供值的倍數。需要啟用padding
。這對於在 NVIDIA 硬體上使用計算能力>= 7.5
(Volta) 的 Tensor Core 尤其有用。 - padding_side (
str
, 可選) — 模型應在其上應用填充的一側。應在“[‘right’, ‘left’]”之間選擇。預設值從同名的類屬性中選擇。 - return_tensors (
str
或 TensorType, 可選) — 如果設定,將返回張量而不是 Python 整數列表。可接受的值為:'tf'
: 返回 TensorFlowtf.constant
物件。'pt'
: 返回 PyTorchtorch.Tensor
物件。'np'
: 返回 Numpynp.ndarray
物件。
- return_token_type_ids (
bool
, 可選) — 是否返回標記型別 ID。如果保留預設值,將根據特定分詞器的預設設定(由return_outputs
屬性定義)返回標記型別 ID。 - return_attention_mask (
bool
, 可選) — 是否返回注意力掩碼。如果保留預設值,將根據特定分詞器的預設設定(由return_outputs
屬性定義)返回注意力掩碼。 - return_overflowing_tokens (
bool
, optional, 預設為False
) — 是否返回溢位的 token 序列。如果提供了輸入 ID 的序列對(或成批序列對),且truncation_strategy = longest_first
或True
,則會引發錯誤,而不是返回溢位 token。 - return_special_tokens_mask (
bool
, optional, 預設為False
) — 是否返回特殊 token 掩碼資訊。 - return_offsets_mapping (
bool
, optional, 預設為False
) — 是否為每個 token 返回(char_start, char_end)
。此功能僅適用於繼承自 PreTrainedTokenizerFast 的快速分詞器,如果使用 Python 的分詞器,此方法將引發
NotImplementedError
。 - return_length (
bool
, optional, 預設為False
) — 是否返回編碼輸入的長度。 - verbose (
bool
, optional, 預設為True
) — 是否列印更多資訊和警告。 - **kwargs — 傳遞給
self.tokenize()
方法
一個 BatchEncoding,包含以下欄位:
-
input_ids — 要輸入到模型中的標記 ID 列表。
-
token_type_ids — 要輸入到模型中的標記型別 ID 列表(當
return_token_type_ids=True
或如果 *“token_type_ids”* 在self.model_input_names
中時)。 -
attention_mask — 指定模型應關注哪些標記的索引列表(當
return_attention_mask=True
或如果 *“attention_mask”* 在self.model_input_names
中時)。 -
overflowing_tokens — 溢位標記序列列表(當指定
max_length
且return_overflowing_tokens=True
時)。 -
num_truncated_tokens — 截斷標記的數量(當指定
max_length
且return_overflowing_tokens=True
時)。 -
special_tokens_mask — 0 和 1 的列表,其中 1 表示新增的特殊標記,0 表示常規序列標記(當
add_special_tokens=True
且return_special_tokens_mask=True
時)。 -
length — 輸入的長度(當
return_length=True
時)
將一個或多個序列或一對或多對序列標記化並準備用於模型的主要方法。
PerceiverFeatureExtractor
預處理單張或批次影像。
PerceiverImageProcessor
class transformers.PerceiverImageProcessor
< source 原始碼 >( do_center_crop: bool = True crop_size: typing.Optional[dict[str, int]] = None do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BICUBIC: 3> do_rescale: bool = True rescale_factor: typing.Union[int, float] = 0.00392156862745098 do_normalize: bool = True image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None **kwargs )
引數
- do_center_crop (
bool
,optional
, 預設為True
) — 是否對影像進行中心裁剪。如果輸入尺寸的任一邊小於crop_size
,則影像將用零填充,然後進行中心裁剪。可透過preprocess
方法中的do_center_crop
引數覆蓋。 - crop_size (
dict[str, int]
, optional, 預設為{"height" -- 256, "width": 256}
):應用中心裁剪後的期望輸出尺寸。可透過preprocess
方法中的crop_size
引數覆蓋。 - do_resize (
bool
, optional, 預設為True
) — 是否將影像大小調整為(size["height"], size["width"])
。可透過preprocess
方法中的do_resize
引數覆蓋。 - size (
dict[str, int]
optional, 預設為{"height" -- 224, "width": 224}
):調整大小後圖像的尺寸。可透過preprocess
方法中的size
引數覆蓋。 - resample (
PILImageResampling
, optional, 預設為PILImageResampling.BICUBIC
) — 定義調整影像大小時使用的重取樣濾鏡。可透過preprocess
方法中的resample
引數覆蓋。 - do_rescale (
bool
, optional, 預設為True
) — 是否透過指定的縮放因子rescale_factor
對影像進行縮放。可透過preprocess
方法中的do_rescale
引數覆蓋。 - rescale_factor (
int
或float
, optional, 預設為1/255
) — 定義縮放影像時使用的縮放因子。可透過preprocess
方法中的rescale_factor
引數覆蓋。 - do_normalize — 是否對影像進行歸一化。可透過
preprocess
方法中的do_normalize
引數覆蓋。 - image_mean (
float
或list[float]
, optional, 預設為IMAGENET_STANDARD_MEAN
) — 影像歸一化時使用的均值。這是一個浮點數或浮點數列表,其長度與影像中的通道數相同。可透過preprocess
方法中的image_mean
引數覆蓋。 - image_std (
float
或list[float]
, optional, 預設為IMAGENET_STANDARD_STD
) — 影像歸一化時使用的標準差。這是一個浮點數或浮點數列表,其長度與影像中的通道數相同。可透過preprocess
方法中的image_std
引數覆蓋。
構建一個 Perceiver 影像處理器。
預處理
< source 原始碼 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_center_crop: typing.Optional[bool] = None crop_size: typing.Optional[dict[str, int]] = None do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None resample: Resampling = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None do_normalize: typing.Optional[bool] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: ChannelDimension = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )
引數
- images (
ImageInput
) — 要預處理的影像。期望單個或批次影像的畫素值範圍為 0 到 255。如果傳入的影像畫素值在 0 到 1 之間,請設定do_rescale=False
。 - do_center_crop (
bool
, optional, 預設為self.do_center_crop
) — 是否將影像中心裁剪為crop_size
。 - crop_size (
dict[str, int]
, optional, 預設為self.crop_size
) — 應用中心裁剪後的期望輸出尺寸。 - do_resize (
bool
, optional, 預設為self.do_resize
) — 是否調整影像大小。 - size (
dict[str, int]
, optional, 預設為self.size
) — 調整大小後圖像的尺寸。 - resample (
int
, optional, 預設為self.resample
) — 調整影像大小時使用的重取樣濾鏡。可以是列舉型別PILImageResampling
之一。僅當do_resize
設定為True
時有效。 - do_rescale (
bool
, optional, 預設為self.do_rescale
) — 是否縮放影像。 - rescale_factor (
float
, optional, 預設為self.rescale_factor
) — 如果do_rescale
設定為True
,則用於縮放影像的縮放因子。 - do_normalize (
bool
, optional, 預設為self.do_normalize
) — 是否對影像進行歸一化。 - image_mean (
float
或list[float]
, optional, 預設為self.image_mean
) — 影像均值。 - image_std (
float
或list[float]
, optional, 預設為self.image_std
) — 影像標準差。 - return_tensors (
str
或TensorType
, optional) — 返回張量的型別。可以是以下之一:- 未設定:返回
np.ndarray
列表。 TensorType.TENSORFLOW
或'tf'
:返回tf.Tensor
型別的批次。TensorType.PYTORCH
或'pt'
:返回torch.Tensor
型別的批次。TensorType.NUMPY
或'np'
:返回np.ndarray
型別的批次。TensorType.JAX
或'jax'
:返回jax.numpy.ndarray
型別的批次。
- 未設定:返回
- data_format (
ChannelDimension
或str
, optional, 預設為ChannelDimension.FIRST
) — 輸出影像的通道維度格式。可以是以下之一:ChannelDimension.FIRST
:影像格式為 (num_channels, height, width)。ChannelDimension.LAST
:影像格式為 (height, width, num_channels)。
- input_data_format (
ChannelDimension
或str
, optional) — 輸入影像的通道維度格式。如果未設定,則從輸入影像推斷通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像格式為 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:影像格式為 (height, width, num_channels)。"none"
或ChannelDimension.NONE
:影像格式為 (height, width)。
預處理一張或一批影像。
PerceiverImageProcessorFast
class transformers.PerceiverImageProcessorFast
< source 原始碼 >( **kwargs: typing_extensions.Unpack[transformers.image_processing_utils_fast.DefaultFastImageProcessorKwargs] )
構建一個快速 Perceiver 影像處理器。
預處理
< source 原始碼 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] *args **kwargs: typing_extensions.Unpack[transformers.image_processing_utils_fast.DefaultFastImageProcessorKwargs] ) → <class 'transformers.image_processing_base.BatchFeature'>
引數
- images (
Union[PIL.Image.Image, numpy.ndarray, torch.Tensor, list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]
) — 要預處理的影像。期望單個或批次影像的畫素值範圍為 0 到 255。如果傳入的影像畫素值在 0 到 1 之間,請設定do_rescale=False
。 - do_resize (
bool
, optional) — 是否調整影像大小。 - size (
dict[str, int]
, optional) — 描述模型的最大輸入尺寸。 - default_to_square (
bool
, optional) — 當調整大小(如果尺寸為整數)時,是否預設為方形影像。 - resample (
Union[PILImageResampling, F.InterpolationMode, NoneType]
) — 調整影像大小時使用的重取樣濾鏡。可以是列舉型別PILImageResampling
之一。僅當do_resize
設定為True
時有效。 - do_center_crop (
bool
, optional) — 是否對影像進行中心裁剪。 - crop_size (
dict[str, int]
, optional) — 應用center_crop
後輸出影像的尺寸。 - do_rescale (
bool
, optional) — 是否縮放影像。 - rescale_factor (
Union[int, float, NoneType]
) — 如果do_rescale
設定為True
,則用於縮放影像的縮放因子。 - do_normalize (
bool
, optional) — 是否對影像進行歸一化。 - image_mean (
Union[float, list[float], NoneType]
) — 用於歸一化的影像均值。僅當do_normalize
設定為True
時有效。 - image_std (
Union[float, list[float], NoneType]
) — 用於歸一化的影像標準差。僅當do_normalize
設定為True
時有效。 - do_convert_rgb (
bool
, optional) — 是否將影像轉換為 RGB 格式。 - return_tensors (
Union[str, ~utils.generic.TensorType, NoneType]
) — 如果設定為pt
,則返回堆疊的張量,否則返回張量列表。 - data_format (
~image_utils.ChannelDimension
, optional) — 僅支援ChannelDimension.FIRST
。為與慢速處理器相容而新增。 - input_data_format (
Union[str, ~image_utils.ChannelDimension, NoneType]
) — 輸入影像的通道維度格式。如果未設定,則從輸入影像推斷通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像格式為 (num_channels, height, width)。"channels_last"
或ChannelDimension.LAST
:影像格式為 (height, width, num_channels)。"none"
或ChannelDimension.NONE
:影像格式為 (height, width)。
- device (
torch.device
, optional) — 處理影像的裝置。如果未設定,則從輸入影像推斷裝置。 - disable_grouping (
bool
, optional) — 是否停用按大小對影像進行分組以單獨處理而不是分批處理。如果為 None,則如果影像在 CPU 上,將設定為 True,否則設定為 False。此選擇基於經驗觀察,詳情請參閱:https://github.com/huggingface/transformers/pull/38157
返回
<class 'transformers.image_processing_base.BatchFeature'>
- data (
dict
) — 由 call 方法返回的列表/陣列/張量字典(“pixel_values”等)。 - tensor_type (
Union[None, str, TensorType]
, 可選) — 您可以在此處提供一個`tensor_type`,以便在初始化時將整數列表轉換為PyTorch/TensorFlow/Numpy張量。
PerceiverTextPreprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverTextPreprocessor
< source >( config: PerceiverConfig )
引數
- config (PerceiverConfig) — 模型配置。
Perceiver 編碼器的文字預處理。可用於嵌入 inputs
並新增位置編碼。
嵌入的維度由配置的 d_model
屬性決定。
PerceiverImagePreprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverImagePreprocessor
< source >( config prep_type = 'conv' spatial_downsample: int = 4 temporal_downsample: int = 1 position_encoding_type: str = 'fourier' in_channels: int = 3 out_channels: int = 64 conv_after_patching: bool = False conv_after_patching_in_channels: int = 54 conv2d_use_batchnorm: bool = True concat_or_add_pos: str = 'concat' project_pos_dim: int = -1 **position_encoding_kwargs )
引數
- config ([PerceiverConfig]) — 模型配置。
- prep_type (
str
, optional, 預設為"conv"
) — 預處理型別。可以是 “conv1x1”、“conv”、“patches” 或 “pixels”。 - spatial_downsample (
int
, optional, 預設為 4) — 空間下采樣因子。 - temporal_downsample (
int
, optional, 預設為 1) — 時間下采樣因子(僅在存在時間維度時相關)。 - position_encoding_type (
str
, optional, 預設為"fourier"
) — 位置編碼型別。可以是“fourier”或“trainable”。 - in_channels (
int
, optional, 預設為 3) — 輸入中的通道數。 - out_channels (
int
, optional, 預設為 64) — 輸出中的通道數。 - conv_after_patching (
bool
, optional, 預設為False
) — 打補丁後是否應用卷積層。 - conv_after_patching_in_channels (
int
, optional, 預設為 54) — 打補丁後卷積層輸入的通道數。 - conv2d_use_batchnorm (
bool
, optional, 預設為True
) — 是否在卷積層中使用批歸一化。 - concat_or_add_pos (
str
, optional, 預設為"concat"
) — 如何將位置編碼連線到輸入。可以是“concat”或“add”。 - project_pos_dim (
int
, optional, 預設為 -1) — 要投影到的位置編碼的維度。如果為 -1,則不應用投影。 - **position_encoding_kwargs (
Dict
, optional) — 位置編碼的關鍵字引數。
Perceiver 編碼器的影像預處理。
注意:如果 prep_type 設定為 “conv1x1” 或 “conv”,則 out_channels 引數指的是卷積層的輸出通道。如果新增絕對位置嵌入,則必須確保位置編碼 kwargs 的 num_channels 設定等於 out_channels。
PerceiverOneHotPreprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverOneHotPreprocessor
< source >( config: PerceiverConfig )
引數
- config (PerceiverConfig) — 模型配置。
Perceiver 編碼器的一熱預處理器。可用於向輸入新增虛擬索引維度。
PerceiverAudioPreprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverAudioPreprocessor
< source >( config prep_type: str = 'patches' samples_per_patch: int = 96 position_encoding_type: str = 'fourier' concat_or_add_pos: str = 'concat' out_channels = 64 project_pos_dim = -1 **position_encoding_kwargs )
引數
- config ([PerceiverConfig]) — 模型配置。
- prep_type (
str
, optional, 預設為"patches"
) — 要使用的預處理器型別。僅支援“patches”。 - samples_per_patch (
int
, optional, 預設為 96) — 每個補丁的樣本數。 - position_encoding_type (
str
, optional, 預設為"fourier"
) — 要使用的位置編碼型別。可以是“trainable”或“fourier”。 - concat_or_add_pos (
str
, optional, 預設為"concat"
) — 如何將位置編碼連線到輸入。可以是“concat”或“add”。 - out_channels (
int
, optional, 預設為 64) — 輸出中的通道數。 - project_pos_dim (
int
, optional, 預設為 -1) — 要投影到的位置編碼的維度。如果為 -1,則不應用投影。 - **position_encoding_kwargs (
Dict
, optional) — 位置編碼的關鍵字引數。
Perceiver 編碼器的音訊預處理。
PerceiverMultimodalPreprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverMultimodalPreprocessor
< source >( modalities: Mapping mask_probs: typing.Optional[collections.abc.Mapping[str, float]] = None min_padding_size: int = 2 )
Perceiver 編碼器的多模態預處理。
對每個模態的輸入進行預處理,然後用可訓練的位置嵌入進行填充,使其具有相同的通道數。
PerceiverProjectionDecoder
class transformers.models.perceiver.modeling_perceiver.PerceiverProjectionDecoder
< source >( config )
引數
- config (PerceiverConfig) — 模型配置。
基線投影解碼器(無交叉注意力)。
PerceiverBasicDecoder
class transformers.models.perceiver.modeling_perceiver.PerceiverBasicDecoder
< source >( config: PerceiverConfig output_num_channels: int position_encoding_type: typing.Optional[str] = 'trainable' output_index_dims: typing.Optional[int] = None num_channels: typing.Optional[int] = 128 subsampled_index_dims: typing.Optional[int] = None qk_channels: typing.Optional[int] = None v_channels: typing.Optional[int] = None num_heads: typing.Optional[int] = 1 widening_factor: typing.Optional[int] = 1 use_query_residual: typing.Optional[bool] = False concat_preprocessed_input: typing.Optional[bool] = False final_project: typing.Optional[bool] = True position_encoding_only: typing.Optional[bool] = False **position_encoding_kwargs )
引數
- config ([PerceiverConfig]) — 模型配置。
- output_num_channels (
int
, optional) — 輸出中的通道數。僅在 final_project 設定為True
時使用。 - position_encoding_type (
str
, optional, 預設為“trainable”) — 要使用的位置編碼型別。可以是“trainable”、“fourier”或“none”。 - output_index_dims (
int
, optional) — 輸出查詢的維度數量。如果 `position_encoding_type` == `none`,則忽略。 - num_channels (
int
, optional, 預設為 128) — 解碼器查詢的通道數量。如果 `position_encoding_type` == `none`,則忽略。 - qk_channels (
int
, optional) — 交叉注意力層中查詢和鍵的通道數量。 - v_channels (
int
, optional) — 交叉注意力層中值的通道數量。 - num_heads (
int
, optional, 預設為 1) — 交叉注意力層中的注意力頭數量。 - widening_factor (
int
, optional, 預設為 1) — 交叉注意力層的擴充套件因子。 - use_query_residual (
bool
, optional, 預設為False
) — 是否在查詢和交叉注意力層輸出之間使用殘差連線。 - concat_preprocessed_input (
bool
, optional, 預設為False
) — 是否將預處理後的輸入與查詢連線起來。 - final_project (
bool
, optional, 預設為True
) — 是否將交叉注意力層的輸出投影到目標維度。 - position_encoding_only (
bool
, optional, 預設為False
) — 是否僅使用此類定義輸出查詢。
基於交叉注意力的解碼器。此類可用於透過交叉注意力操作解碼潛在變數的最終隱藏狀態,其中潛在變數生成鍵和值。
此類輸出的形狀取決於如何定義輸出查詢(也稱為解碼器查詢)。
PerceiverClassificationDecoder
class transformers.models.perceiver.modeling_perceiver.PerceiverClassificationDecoder
< 源 >( config **decoder_kwargs )
引數
- config (PerceiverConfig) — 模型配置。
基於交叉注意力的分類解碼器。`PerceiverBasicDecoder` 的輕量級封裝,用於輸出 logits。將 Perceiver 編碼器的輸出從 (batch_size, num_latents, d_latents) 形狀轉換為 (batch_size, num_labels) 形狀的張量。查詢的形狀為 (batch_size, 1, num_labels)。
PerceiverOpticalFlowDecoder
class transformers.models.perceiver.modeling_perceiver.PerceiverOpticalFlowDecoder
< 源 >( config output_image_shape output_num_channels = 2 rescale_factor = 100.0 **decoder_kwargs )
基於交叉注意力的光流解碼器。
PerceiverBasicVideoAutoencodingDecoder
class transformers.models.perceiver.modeling_perceiver.PerceiverBasicVideoAutoencodingDecoder
< 源 >( config: PerceiverConfig output_shape: list position_encoding_type: str **decoder_kwargs )
基於交叉注意力的影片自編碼解碼器。`[PerceiverBasicDecoder]` 的輕量級封裝,具有影片重塑邏輯。
PerceiverMultimodalDecoder
class transformers.models.perceiver.modeling_perceiver.PerceiverMultimodalDecoder
< 源 >( config: PerceiverConfig modalities: dict num_outputs: int output_num_channels: int min_padding_size: typing.Optional[int] = 2 subsampled_index_dims: typing.Optional[dict[str, transformers.models.perceiver.modeling_perceiver.PerceiverAbstractDecoder]] = None **decoder_kwargs )
引數
- config ([PerceiverConfig]) — 模型配置。
- modalities (
dict[str, PerceiverAbstractDecoder]
) — 將模態名稱對映到該模態解碼器的字典。 - num_outputs (
int
) — 解碼器的輸出數量。 - output_num_channels (
int
) — 輸出的通道數量。 - min_padding_size (
int
, optional, 預設為 2) — 所有模態的最小填充大小。最終輸出的通道數將等於所有模態的最大通道數加上 `min_padding_size`。 - subsampled_index_dims (
dict[str, PerceiverAbstractDecoder]
, optional) — 將模態名稱對映到該模態解碼器查詢要使用的子取樣索引維度的字典。
透過組合單模態解碼器進行多模態解碼。建構函式的 `modalities` 引數是一個字典,將模態名稱對映到該模態的解碼器。該解碼器將用於構造該模態的查詢。模態特定的查詢將用可訓練的模態特定引數進行填充,然後沿時間維度連線起來。
接下來,對所有模態執行共享的交叉注意力操作。
PerceiverProjectionPostprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverProjectionPostprocessor
< 源 >( in_channels: int out_channels: int )
Perceiver 的投影后處理。可用於將解碼器輸出的通道投影到更低的維度。
PerceiverAudioPostprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverAudioPostprocessor
< 源 >( config: PerceiverConfig in_channels: int postproc_type: str = 'patches' )
Perceiver 的音訊後處理。可用於將解碼器輸出轉換為音訊特徵。
PerceiverClassificationPostprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverClassificationPostprocessor
< 源 >( config: PerceiverConfig in_channels: int )
Perceiver 的分類後處理。可用於將解碼器輸出轉換為分類 logits。
PerceiverMultimodalPostprocessor
class transformers.models.perceiver.modeling_perceiver.PerceiverMultimodalPostprocessor
< 源 >( modalities: Mapping input_is_dict: bool = False )
Perceiver 的多模態後處理。可用於將模態特定的後處理器組合成一個單一的後處理器。
PerceiverModel
class transformers.PerceiverModel
< 源 >( config decoder: typing.Optional[ForwardRef('PerceiverAbstractDecoder')] = None input_preprocessor: typing.Callable[..., tuple[torch.Tensor, typing.Optional[torch.Tensor], torch.Tensor]] = None output_postprocessor: typing.Callable[..., typing.Any] = None )
引數
- config (PerceiverModel) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
- decoder (
PerceiverDecoder
, optional) — 解碼器模組,將潛在表示轉換為任務預測。 - input_preprocessor (
PreprocessorType
, optional) — 預處理器,將原始輸入編碼為模型的張量。 - output_postprocessor (
PostprocessorType
, optional) — 後處理器,將模型輸出轉換為最終預測。
感知器:一種可擴充套件的、完全注意力的架構。
請注意,透過在模型的 `forward` 中將 `interpolate_pos_encoding` 設定為 `True`,可以對解析度高於訓練時使用的影像進行 Perceiver 微調。這將把預訓練的位置嵌入插值到更高的解析度。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< 源 >( inputs: FloatTensor attention_mask: typing.Optional[torch.FloatTensor] = None subsampled_output_points: typing.Optional[dict[str, torch.Tensor]] = None head_mask: typing.Optional[torch.FloatTensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverModelOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.FloatTensor
) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.FloatTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩碼的標記,
- 0 表示被掩碼的標記。
- subsampled_output_points (
dict[str, torch.Tensor]
,可選) — 用作解碼器查詢的張量字典。解碼器將這些查詢對映到模型的潛在表示。用於子取樣解碼,例如僅解碼某些影像塊時。 - head_mask (
torch.FloatTensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於停用自注意力模組中選定頭的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
,預設為False
) — 是否插值預訓練的位置編碼。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverModelOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverModelOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
logits (
torch.FloatTensor
,形狀為(batch_size, num_labels)
) — 分類 (如果 config.num_labels==1 則為迴歸) 分數 (SoftMax 之前)。 -
last_hidden_state (形狀為
(batch_size, sequence_length, hidden_size)
的torch.FloatTensor
, 可選,預設為None
) — 模型最後一層輸出的隱藏狀態序列。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverModel 的前向傳播方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import PerceiverConfig, PerceiverTokenizer, PerceiverImageProcessor, PerceiverModel
>>> from transformers.models.perceiver.modeling_perceiver import (
... PerceiverTextPreprocessor,
... PerceiverImagePreprocessor,
... PerceiverClassificationDecoder,
... )
>>> import torch
>>> import requests
>>> from PIL import Image
>>> # EXAMPLE 1: using the Perceiver to classify texts
>>> # - we define a TextPreprocessor, which can be used to embed tokens
>>> # - we define a ClassificationDecoder, which can be used to decode the
>>> # final hidden states of the latents to classification logits
>>> # using trainable position embeddings
>>> config = PerceiverConfig()
>>> preprocessor = PerceiverTextPreprocessor(config)
>>> decoder = PerceiverClassificationDecoder(
... config,
... num_channels=config.d_latents,
... trainable_position_encoding_kwargs=dict(num_channels=config.d_latents, index_dims=1),
... use_query_residual=True,
... )
>>> model = PerceiverModel(config, input_preprocessor=preprocessor, decoder=decoder)
>>> # you can then do a forward pass as follows:
>>> tokenizer = PerceiverTokenizer()
>>> text = "hello world"
>>> inputs = tokenizer(text, return_tensors="pt").input_ids
>>> with torch.no_grad():
... outputs = model(inputs=inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 2]
>>> # to train, one can train the model using standard cross-entropy:
>>> criterion = torch.nn.CrossEntropyLoss()
>>> labels = torch.tensor([1])
>>> loss = criterion(logits, labels)
>>> # EXAMPLE 2: using the Perceiver to classify images
>>> # - we define an ImagePreprocessor, which can be used to embed images
>>> config = PerceiverConfig(image_size=224)
>>> preprocessor = PerceiverImagePreprocessor(
... config,
... prep_type="conv1x1",
... spatial_downsample=1,
... out_channels=256,
... position_encoding_type="trainable",
... concat_or_add_pos="concat",
... project_pos_dim=256,
... trainable_position_encoding_kwargs=dict(
... num_channels=256,
... index_dims=config.image_size**2,
... ),
... )
>>> model = PerceiverModel(
... config,
... input_preprocessor=preprocessor,
... decoder=PerceiverClassificationDecoder(
... config,
... num_channels=config.d_latents,
... trainable_position_encoding_kwargs=dict(num_channels=config.d_latents, index_dims=1),
... use_query_residual=True,
... ),
... )
>>> # you can then do a forward pass as follows:
>>> image_processor = PerceiverImageProcessor()
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> inputs = image_processor(image, return_tensors="pt").pixel_values
>>> with torch.no_grad():
... outputs = model(inputs=inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 2]
>>> # to train, one can train the model using standard cross-entropy:
>>> criterion = torch.nn.CrossEntropyLoss()
>>> labels = torch.tensor([1])
>>> loss = criterion(logits, labels)
PerceiverForMaskedLM
class transformers.PerceiverForMaskedLM
< 源 >( config: PerceiverConfig )
引數
- config (PerceiverConfig) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
Perceiver 用於掩碼語言建模的示例用法。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< 源 >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None input_ids: typing.Optional[torch.Tensor] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverMaskedLMOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩碼的標記,
- 0 表示被掩碼的標記。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於停用自注意力模組中選定頭的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[-100, 0, ..., config.vocab_size]
範圍內 (請參閱input_ids
文件字串)。索引設定為-100
的標記將被忽略 (被掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
範圍內的標記計算。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。 - input_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下將忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverMaskedLMOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverMaskedLMOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 掩碼語言建模 (MLM) 損失。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForMaskedLM 的前向傳播方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, PerceiverForMaskedLM
>>> import torch
>>> tokenizer = AutoTokenizer.from_pretrained("deepmind/language-perceiver")
>>> model = PerceiverForMaskedLM.from_pretrained("deepmind/language-perceiver")
>>> # training
>>> text = "This is an incomplete sentence where some words are missing."
>>> inputs = tokenizer(text, padding="max_length", return_tensors="pt")
>>> # mask " missing."
>>> inputs["input_ids"][0, 52:61] = tokenizer.mask_token_id
>>> labels = tokenizer(text, padding="max_length", return_tensors="pt").input_ids
>>> outputs = model(**inputs, labels=labels)
>>> loss = outputs.loss
>>> round(loss.item(), 2)
19.87
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 2048, 262]
>>> # inference
>>> text = "This is an incomplete sentence where some words are missing."
>>> encoding = tokenizer(text, padding="max_length", return_tensors="pt")
>>> # mask bytes corresponding to " missing.". Note that the model performs much better if the masked span starts with a space.
>>> encoding["input_ids"][0, 52:61] = tokenizer.mask_token_id
>>> # forward pass
>>> with torch.no_grad():
... outputs = model(**encoding)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 2048, 262]
>>> masked_tokens_predictions = logits[0, 52:61].argmax(dim=-1).tolist()
>>> tokenizer.decode(masked_tokens_predictions)
' missing.'
PerceiverForSequenceClassification
class transformers.PerceiverForSequenceClassification
< 源 >( config )
引數
- config (PerceiverForSequenceClassification) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
Perceiver 用於文字分類的示例用法。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< 源 >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None input_ids: typing.Optional[torch.Tensor] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩碼的標記,
- 0 表示被掩碼的標記。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於停用自注意力模組中選定頭的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失 (均方損失);如果config.num_labels > 1
,則計算分類損失 (交叉熵)。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。 - input_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下將忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForSequenceClassification 的前向傳播方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import AutoTokenizer, PerceiverForSequenceClassification
>>> tokenizer = AutoTokenizer.from_pretrained("deepmind/language-perceiver")
>>> model = PerceiverForSequenceClassification.from_pretrained("deepmind/language-perceiver")
>>> text = "hello world"
>>> inputs = tokenizer(text, return_tensors="pt").input_ids
>>> outputs = model(inputs=inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 2]
PerceiverForImageClassificationLearned
class transformers.PerceiverForImageClassificationLearned
< 源 >( config )
引數
- config (PerceiverForImageClassificationLearned) — 模型配置類,包含模型的所有引數。使用配置檔案進行初始化不會載入與模型相關的權重,只加載配置。請檢視 from_pretrained() 方法以載入模型權重。
Perceiver 用於影像分類(如 ImageNet 任務)的示例用法。
此模型使用學習到的位置嵌入。換句話說,此模型不提供任何關於影像結構的特權資訊。如論文所示,該模型可以在 ImageNet 上達到 72.7 的 top-1 準確率。
PerceiverForImageClassificationLearned 使用 PerceiverImagePreprocessor (使用 prep_type="conv1x1"
) 來預處理輸入影像,並使用 PerceiverClassificationDecoder 將 PerceiverModel 的潛在表示解碼為分類 logits。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< 源 >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None interpolate_pos_encoding: bool = False return_dict: typing.Optional[bool] = None pixel_values: typing.Optional[torch.Tensor] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力操作的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩碼的標記,
- 0 表示被掩碼的標記。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於停用自注意力模組中選定頭的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示頭部未被掩碼,
- 0 表示頭部被掩碼。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失(均方損失);如果config.num_labels > 1
,則計算分類損失(交叉熵損失)。 - interpolate_pos_encoding (
bool
,預設為False
) — 是否對預訓練的位置編碼進行插值。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。 - pixel_values (
torch.Tensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 與輸入影像對應的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForImageClassificationLearned 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, PerceiverForImageClassificationLearned
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_processor = AutoImageProcessor.from_pretrained("deepmind/vision-perceiver-learned")
>>> model = PerceiverForImageClassificationLearned.from_pretrained("deepmind/vision-perceiver-learned")
>>> inputs = image_processor(images=image, return_tensors="pt").pixel_values
>>> outputs = model(inputs=inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 1000]
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: tabby, tabby cat
PerceiverForImageClassificationFourier
class transformers.PerceiverForImageClassificationFourier
< source >( config )
引數
- config (PerceiverForImageClassificationFourier) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
Perceiver 用於影像分類(如 ImageNet 任務)的示例用法。
該模型使用固定的二維傅立葉位置嵌入。正如論文所示,該模型在 ImageNet 上可以達到 79.0 的 Top-1 準確率,在大型資料集(即 JFT)上預訓練後可以達到 84.5。
PerceiverForImageClassificationLearned 使用 PerceiverImagePreprocessor (prep_type="pixels"
) 來預處理輸入影像,並使用 PerceiverClassificationDecoder 將 PerceiverModel 的潛在表示解碼為分類 logits。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< source >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None pixel_values: typing.Optional[torch.Tensor] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充令牌索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示令牌**未被掩碼**,
- 0 表示令牌**已被掩碼**。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失(均方損失);如果config.num_labels > 1
,則計算分類損失(交叉熵損失)。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。 - pixel_values (
torch.Tensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 與輸入影像對應的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForImageClassificationFourier 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, PerceiverForImageClassificationFourier
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_processor = AutoImageProcessor.from_pretrained("deepmind/vision-perceiver-fourier")
>>> model = PerceiverForImageClassificationFourier.from_pretrained("deepmind/vision-perceiver-fourier")
>>> inputs = image_processor(images=image, return_tensors="pt").pixel_values
>>> outputs = model(inputs=inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 1000]
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: tabby, tabby cat
PerceiverForImageClassificationConvProcessing
class transformers.PerceiverForImageClassificationConvProcessing
< source >( config )
引數
- config (PerceiverForImageClassificationConvProcessing) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
Perceiver 用於影像分類(如 ImageNet 任務)的示例用法。
該模型使用一個二維卷積+最大池化預處理網路。正如論文所示,該模型在 ImageNet 上可以達到 82.1 的 Top-1 準確率。
PerceiverForImageClassificationLearned 使用 PerceiverImagePreprocessor (prep_type="conv"
) 來預處理輸入影像,並使用 PerceiverClassificationDecoder 將 PerceiverModel 的潛在表示解碼為分類 logits。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< source >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None pixel_values: typing.Optional[torch.Tensor] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充令牌索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示令牌**未被掩碼**,
- 0 表示令牌**已被掩碼**。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失(均方損失);如果config.num_labels > 1
,則計算分類損失(交叉熵損失)。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。 - pixel_values (
torch.Tensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 與輸入影像對應的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForImageClassificationConvProcessing 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import AutoImageProcessor, PerceiverForImageClassificationConvProcessing
>>> from PIL import Image
>>> import requests
>>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
>>> image = Image.open(requests.get(url, stream=True).raw)
>>> image_processor = AutoImageProcessor.from_pretrained("deepmind/vision-perceiver-conv")
>>> model = PerceiverForImageClassificationConvProcessing.from_pretrained("deepmind/vision-perceiver-conv")
>>> inputs = image_processor(images=image, return_tensors="pt").pixel_values
>>> outputs = model(inputs=inputs)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 1000]
>>> # model predicts one of the 1000 ImageNet classes
>>> predicted_class_idx = logits.argmax(-1).item()
>>> print("Predicted class:", model.config.id2label[predicted_class_idx])
Predicted class: tabby, tabby cat
PerceiverForOpticalFlow
class transformers.PerceiverForOpticalFlow
< source >( config )
引數
- config (PerceiverForOpticalFlow) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
Perceiver 用於光流的示例用法,適用於 Sintel 和 KITTI 等任務。PerceiverForOpticalFlow 使用 PerceiverImagePreprocessor (使用 _prep_type="patches"_ ) 預處理輸入影像,並使用 PerceiverOpticalFlowDecoder 解碼 PerceiverModel 的潛在表示。
作為輸入,將兩個連續幀沿通道維度拼接,並圍繞每個畫素提取一個 3x3 塊(每個畫素有 3x3x3x2 = 54 個值)。固定傅立葉位置編碼用於編碼補丁中每個畫素的位置。接下來,應用感知器編碼器。為了解碼,使用與輸入相同的編碼來查詢潛在表示。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< source >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充令牌索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示令牌**未被掩碼**,
- 0 表示令牌**已被掩碼**。
- head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算光流損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForOpticalFlow 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import PerceiverForOpticalFlow
>>> import torch
>>> model = PerceiverForOpticalFlow.from_pretrained("deepmind/optical-flow-perceiver")
>>> # in the Perceiver IO paper, the authors extract a 3 x 3 patch around each pixel,
>>> # leading to 3 x 3 x 3 = 27 values for each pixel (as each pixel also has 3 color channels)
>>> # patches have shape (batch_size, num_frames, num_channels, height, width)
>>> # the authors train on resolutions of 368 x 496
>>> patches = torch.randn(1, 2, 27, 368, 496)
>>> outputs = model(inputs=patches)
>>> logits = outputs.logits
>>> list(logits.shape)
[1, 368, 496, 2]
PerceiverForMultimodalAutoencoding
class transformers.PerceiverForMultimodalAutoencoding
< source >( config: PerceiverConfig )
引數
- config (PerceiverConfig) — 包含模型所有引數的模型配置類。使用配置檔案初始化不會載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法以載入模型權重。
Perceiver 用於多模態(影片)自動編碼的示例用法,適用於 Kinetics-700 等任務。
PerceiverForMultimodalAutoencoding 使用 PerceiverMultimodalPreprocessor 來預處理影像、音訊和類別標籤這 3 種模態。該預處理器使用模態特有的預處理器分別預處理每種模態,然後將它們拼接起來。可訓練的位置嵌入用於將每種模態填充到相同的通道數,以實現時間維度上的拼接。接下來,應用 Perceiver 編碼器。
PerceiverMultimodalDecoder 用於解碼 PerceiverModel 的潛在表示。該解碼器使用每個模態特有的解碼器來構建查詢。解碼器查詢是根據預處理後的輸入建立的。然而,在單個前向傳播中對整個影片進行自動編碼在計算上是不可行的,因此只使用解碼器查詢的一部分與潛在表示進行交叉注意力。這由每種模態的下采樣索引決定,這些索引可以作為附加輸入提供給 PerceiverForMultimodalAutoencoding 的前向傳播。
PerceiverMultimodalDecoder 還會將不同模態的解碼器查詢填充到相同的通道數,以便沿時間維度進行拼接。接下來,與 PerceiverModel 的潛在表示執行交叉注意力。
最後,~models.perceiver.modeling_perceiver.PerceiverMultiModalPostprocessor
用於將此張量轉換為實際影片。它首先將輸出分成不同的模態,然後對每種模態應用相應的後處理器。
請注意,在評估期間透過遮蔽分類標籤(即,簡單地為“標籤”模態提供一個零張量),該自編碼模型就變成了 Kinetics 700 影片分類器。
該模型繼承自 PreTrainedModel。請查閱超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。
該模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解所有與一般用法和行為相關的事項。
前向
< source >( inputs: typing.Optional[torch.Tensor] = None attention_mask: typing.Optional[torch.Tensor] = None subsampled_output_points: typing.Optional[dict[str, torch.Tensor]] = None head_mask: typing.Optional[torch.Tensor] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None labels: typing.Optional[torch.Tensor] = None return_dict: typing.Optional[bool] = None ) → transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
引數
- inputs (
torch.Tensor
,可選) — Perceiver 的輸入。可以是任何型別:影像、文字、音訊、影片等。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充令牌索引執行注意力操作的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示令牌**未被掩碼**,
- 0 表示令牌**已被掩碼**。
- subsampled_output_points (
dict[str, torch.Tensor]
,可選) — 用作解碼器查詢的張量字典。解碼器將這些查詢對映到模型的潛在表示。用於下采樣解碼,例如僅解碼某些影像塊。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部**未被掩碼**,
- 0 表示頭部**已被掩碼**。
- output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算影像分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
範圍內。如果config.num_labels == 1
,則計算迴歸損失(均方損失);如果config.num_labels > 1
,則計算分類損失(交叉熵損失)。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通的元組。
返回
transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 tuple(torch.FloatTensor)
一個 transformers.models.perceiver.modeling_perceiver.PerceiverClassifierOutput 或 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或 config.return_dict=False
時),包含根據配置 (PerceiverConfig) 和輸入而變化的各種元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
hidden_states (
tuple[torch.FloatTensor]
,可選,在傳入output_hidden_states=True
或config.output_hidden_states=True
時返回) —torch.FloatTensor
的元組 (如果模型有嵌入層,則包括嵌入層的輸出,加上每一層的輸出),形狀為(batch_size, sequence_length, hidden_size)
。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple[torch.FloatTensor]
,可選,在傳入output_attentions=True
或config.output_attentions=True
時返回) —torch.FloatTensor
的元組 (每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
PerceiverForMultimodalAutoencoding 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現需要在該函式中定義,但之後應呼叫 Module
例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則會默默地忽略它們。
示例
>>> from transformers import PerceiverForMultimodalAutoencoding
>>> import torch
>>> import numpy as np
>>> # create multimodal inputs
>>> images = torch.randn((1, 16, 3, 224, 224))
>>> audio = torch.randn((1, 30720, 1))
>>> inputs = dict(image=images, audio=audio, label=torch.zeros((images.shape[0], 700)))
>>> model = PerceiverForMultimodalAutoencoding.from_pretrained("deepmind/multimodal-perceiver")
>>> # in the Perceiver IO paper, videos are auto-encoded in chunks
>>> # each chunk subsamples different index dimensions of the image and audio modality decoder queries
>>> nchunks = 128
>>> image_chunk_size = np.prod((16, 224, 224)) // nchunks
>>> audio_chunk_size = audio.shape[1] // model.config.samples_per_patch // nchunks
>>> # process the first chunk
>>> chunk_idx = 0
>>> subsampling = {
... "image": torch.arange(image_chunk_size * chunk_idx, image_chunk_size * (chunk_idx + 1)),
... "audio": torch.arange(audio_chunk_size * chunk_idx, audio_chunk_size * (chunk_idx + 1)),
... "label": None,
... }
>>> outputs = model(inputs=inputs, subsampled_output_points=subsampling)
>>> logits = outputs.logits
>>> list(logits["audio"].shape)
[1, 240]
>>> list(logits["image"].shape)
[1, 6272, 3]
>>> list(logits["label"].shape)
[1, 700]