Transformers 文件
IDEFICS
並獲得增強的文件體驗
開始使用
IDEFICS
概述
IDEFICS 模型在 Hugo Laurençon, Lucile Saulnier, Léo Tronchon, Stas Bekman, Amanpreet Singh, Anton Lozhkov, Thomas Wang, Siddharth Karamcheti, Alexander M. Rush, Douwe Kiela, Matthieu Cord, Victor Sanh 提出的 OBELICS: 一個開放式網路規模的交錯影像-文字文件過濾資料集 中被提出。
論文摘要如下:
在交錯影像和文字的自然文件上訓練的大型多模態模型,在各種需要對一張或多張影像進行推理以生成文字的多模態基準測試上,其效能優於在影像-文字對上訓練的模型。然而,用於訓練這些模型的資料集尚未釋出,並且收集過程也未完全指定。我們引入了 OBELICS 資料集,這是一個開放式網路規模的交錯影像-文字文件過濾資料集,包含從 Common Crawl 中提取的 1.41 億個網頁,3.53 億個相關影像,以及 1150 億個文字標記。我們描述了資料集建立過程,提供了全面的過濾規則,並對資料集內容進行了分析。為了展示 OBELICS 的可行性,我們使用該資料集訓練了一個 800 億引數的視覺和語言模型,並在各種多模態基準測試上獲得了有競爭力的效能。我們釋出了用於復現資料集的程式碼以及資料集本身。
此模型由 HuggingFaceM4 貢獻。原始程式碼可以在此處找到。(TODO:尚未有公開連結)。
Transformers 中的 IDEFICS 建模程式碼用於預訓練 IDEFICS 模型的微調和推理。
要從頭開始訓練新的 IDEFICS 模型,請使用 m4 程式碼庫(一旦公開將提供連結)
IdeficsConfig
class transformers.IdeficsConfig
< 來源 >( vocab_size = 32000 additional_vocab_size = 0 hidden_size = 4096 intermediate_size = 11008 num_hidden_layers = 32 num_attention_heads = 32 dropout = 0.0 hidden_act = 'silu' initializer_range = 0.02 alpha_initializer = 'zeros' alphas_initializer_range = 0.0 alpha_type = 'float' rms_norm_eps = 1e-06 use_cache = True pad_token_id = 0 bos_token_id = 1 eos_token_id = 2 tie_word_embeddings = False cross_layer_interval = 1 qk_layer_norms = False freeze_text_layers = True freeze_text_module_exceptions = [] freeze_lm_head = False freeze_vision_layers = True freeze_vision_module_exceptions = [] use_resampler = False vision_config = None perceiver_config = None **kwargs )
引數
- additional_vocab_size (
int
, 可選, 預設為 0) — 模型的額外詞彙量大小,通常用於特殊的“”標記。額外詞彙標記始終可訓練,而常規詞彙標記可凍結或不凍結。
- vocab_size (
int
, 可選, 預設為 32000) — Idefics 模型的詞彙量大小。定義了呼叫 ~IdeficsModel 時傳入的inputs_ids
可以表示的不同標記的數量。 - hidden_size (
int
, 可選, 預設為 4096) — 隱藏表示的維度。 - intermediate_size (
int
, 可選, 預設為 11008) — MLP 表示的維度。 - num_hidden_layers (
int
, 可選, 預設為 32) — Transformer 編碼器中的隱藏層數量。 - num_attention_heads (
int
, 可選, 預設為 32) — Transformer 編碼器中每個注意力層的注意力頭數量。 - dropout (
float
, 可選, 預設為 0.0) — 用於嵌入、編碼器和池化器中所有全連線層的 dropout 機率。 - hidden_act (
str
或function
, 可選, 預設為"silu"
) — 解碼器中的非線性啟用函式(函式或字串)。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的 truncated_normal_initializer 的標準差。 - alpha_initializer (
str
, 可選, 預設為"zeros"
) — alphas 的初始化型別。 - alphas_initializer_range (
float
, 可選, 預設為 0.0) — 用於初始化門控交叉注意力中 alphas 的 truncated_normal_initializer 的標準差。 - alpha_type (
str
, 可選, 預設為"float"
) — 門控 alphas 應該是向量還是單個浮點數。 - rms_norm_eps (
float
, 可選, 預設為 1e-6) — rms 歸一化層使用的 epsilon。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回上次的 key/values attention(並非所有模型都使用)。僅在config.is_decoder=True
時相關。 - pad_token_id (
int
, 可選, 預設為 0) — 填充標記 ID。 - bos_token_id (
int
, 可選, 預設為 1) — 流開始標記 ID。 - eos_token_id (
int
, 可選, 預設為 2) — 流結束標記 ID。 - tie_word_embeddings(
bool
, 可選, 預設為False
) — 是否繫結詞嵌入。 - cross_layer_interval (
int
, 可選, 預設為 1) — 交叉注意力(從文字到影像)層的間隔。 - qk_layer_norms (
bool
, 可選, 預設為False
) — 是否在 q 和 k 之後新增層歸一化。 - freeze_text_layers (
bool
, 可選, 預設為True
) — 是否凍結文字層。 - freeze_text_module_exceptions (
bool
, 可選, 預設為[]
) — 當freeze_text_layers
為True
時,凍結文字層的例外情況。 - freeze_lm_head (
bool
, 可選, 預設為False
) — 是否凍結 lm 頭。 - freeze_vision_layers (
bool
, 可選, 預設為True
) — 是否凍結視覺層。 - freeze_vision_module_exceptions (
bool
, 可選, 預設為[]
) — 當freeze_vision_layers
為True
時,凍結視覺層的例外情況。 - use_resampler (
bool
, 可選, 預設為False
) — 是否使用重取樣器。 - vision_config (
IdeficsVisionConfig
, 可選) — 自定義視覺配置或字典。 - perceiver_config (
IdeficsPerceiverConfig
, 可選) — 自定義感知器配置或字典。
這是用於儲存 IdeficsModel 配置的配置類。它用於根據指定的引數例項化 Idefics 模型,定義模型架構。使用預設值例項化配置將產生與 Idefics-9B 類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 的文件。
示例
>>> from transformers import IdeficsModel, IdeficsConfig
>>> # Initializing a Idefics idefics-9b style configuration
>>> configuration = IdeficsConfig()
>>> # Initializing a model from the idefics-9b style configuration
>>> model = IdeficsModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
IdeficsModel
class transformers.IdeficsModel
< 來源 >( config: IdeficsConfig )
引數
- config (IdeficsConfig) — 包含模型所有引數的模型配置類。使用配置檔案例項化不會載入與模型相關的權重,只加載配置。有關載入模型權重的詳細資訊,請檢視 from_pretrained() 方法。
純 Idefics 模型,輸出原始隱藏狀態,不帶任何特定頭部。
此模型繼承自 PreTrainedModel。有關庫為所有模型實現的通用方法(如下載或儲存、調整輸入嵌入大小、修剪頭部等),請檢視超類文件。
此模型也是 PyTorch torch.nn.Module 的子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件中所有與通用用法和行為相關的事項。
前向傳播
< 來源 >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None image_encoder_embeddings: typing.Optional[torch.FloatTensor] = None perceiver_embeddings: typing.Optional[torch.FloatTensor] = None image_attention_mask: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = False return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.modeling_flash_attention_utils.FlashAttentionKwargs] ) → transformers.models.idefics.modeling_idefics.IdeficsBaseModelOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
, 形狀為(batch_size, sequence_length)
, 可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。索引可以使用 AutoTokenizer 獲得。有關詳細資訊,請參閱 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
, 形狀為(batch_size, sequence_length)
, 可選) — 用於避免在填充標記索引上執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 未被掩蓋的標記為 1,
- 被掩蓋的標記為 0。
- position_ids (
torch.LongTensor
, 形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
list[torch.FloatTensor]
, 可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv 快取指南;
- 長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個張量,形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
)。這也被稱為舊版快取格式。
模型將輸出與作為輸入提供的快取格式相同的快取格式。如果未傳入
past_key_values
,則將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的)的形狀(batch_size, 1)
,而不是所有input_ids
的形狀(batch_size, sequence_length)
。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選引數,可以直接傳入嵌入式表示,而不是傳入input_ids
。如果你想對如何將input_ids
索引轉換為相關向量擁有比模型內部嵌入查詢矩陣更多的控制權,這將非常有用。 - pixel_values (
torch.FloatTensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - image_encoder_embeddings (
torch.FloatTensor
,可選) — 影像編碼器的輸出。 - perceiver_embeddings (
torch.FloatTensor
,可選) — 感知器重取樣器的輸出。 - image_attention_mask (
torch.LongTensor
,可選) — 用於影像編碼器的注意力掩碼。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
,可選,預設為False
) — 是否插值預訓練的位置編碼。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 表示輸入序列標記在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.models.idefics.modeling_idefics.IdeficsBaseModelOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.models.idefics.modeling_idefics.IdeficsBaseModelOutputWithPast
或一個 torch.FloatTensor
的元組(如果傳入 return_dict=False
或當 config.return_dict=False
時),其中包含各種元素,具體取決於配置 (IdeficsConfig) 和輸入。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。如果使用了
past_key_values
,則只輸出形狀為(batch_size, 1, hidden_size)
的序列的最後一個隱藏狀態。 -
past_key_values (
tuple(tuple(torch.FloatTensor))
,可選,當傳入use_cache=True
或當config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量),如果config.is_encoder_decoder=True
,則可選包含 2 個額外形狀為(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的張量。包含預計算的隱藏狀態(自注意力塊中的鍵和值,如果
config.is_encoder_decoder=True
則可選包含交叉注意力塊中的鍵和值),可用於(參見past_key_values
輸入)加速順序解碼。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
image_hidden_states (
tuple(torch.FloatTensor)
,可選) —torch.FloatTensor
的元組(一個用於影像嵌入的輸出,(batch_size, num_images, sequence_length, hidden_size)
。模型由視覺編碼器生成,可選由感知器生成的影像隱藏狀態
IdeficsModel forward 方法,覆蓋 __call__
特殊方法。
儘管前向傳播的配方需要在此函式中定義,但此後應呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默忽略它們。
IdeficsForVisionText2Text
前向傳播
< source >( input_ids: typing.Optional[torch.LongTensor] = None attention_mask: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.LongTensor] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None inputs_embeds: typing.Optional[torch.FloatTensor] = None pixel_values: typing.Optional[torch.FloatTensor] = None image_encoder_embeddings: typing.Optional[torch.FloatTensor] = None perceiver_embeddings: typing.Optional[torch.FloatTensor] = None image_attention_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.LongTensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None interpolate_pos_encoding: typing.Optional[bool] = False return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None **kwargs: typing_extensions.Unpack[transformers.models.idefics.modeling_idefics.KwargsForCausalLM] ) → transformers.models.idefics.modeling_idefics.IdeficsCausalLMOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 詞彙表中輸入序列標記的索引。預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩蓋的標記,
- 0 表示被掩蓋的標記。
- position_ids (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - past_key_values (
list[torch.FloatTensor]
,可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼上一階段返回的past_key_values
,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,參見我們的 kv 快取指南;
- 一個
tuple(torch.FloatTensor)
的元組,長度為config.n_layers
,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量。這也稱為舊版快取格式。
模型將輸出與輸入相同的快取格式。如果未傳入
past_key_values
,則將返回舊版快取格式。如果使用
past_key_values
,使用者可以選擇只輸入形狀為(batch_size, 1)
的最後一個input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - inputs_embeds (
torch.FloatTensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選引數,可以直接傳入嵌入式表示,而不是傳入input_ids
。如果你想對如何將input_ids
索引轉換為相關向量擁有比模型內部嵌入查詢矩陣更多的控制權,這將非常有用。 - pixel_values (
torch.FloatTensor
,形狀為(batch_size, num_channels, image_size, image_size)
,可選) — 對應於輸入影像的張量。畫素值可以使用{image_processor_class}
獲取。有關詳細資訊,請參見{image_processor_class}.__call__
({processor_class}
使用{image_processor_class}
處理影像)。 - image_encoder_embeddings (
torch.FloatTensor
,可選) — 影像編碼器的輸出。 - perceiver_embeddings (
torch.FloatTensor
,可選) — 感知器重取樣器的輸出。 - image_attention_mask (
torch.LongTensor
,可選) — 影像編碼器的注意力掩碼。 - labels (
torch.LongTensor
,形狀為(batch_size, sequence_length)
,可選) — 用於計算掩碼語言建模損失的標籤。索引應在[0, ..., config.vocab_size]
或 -100 之間(參見input_ids
文件字串)。索引設定為-100
的標記將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的標記計算。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - interpolate_pos_encoding (
bool
,可選,預設為False
) — 是否插值預訓練的位置編碼。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。 - cache_position (
torch.LongTensor
,形狀為(sequence_length)
,可選) — 表示輸入序列標記在序列中位置的索引。與position_ids
不同,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。
返回
transformers.models.idefics.modeling_idefics.IdeficsCausalLMOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.models.idefics.modeling_idefics.IdeficsCausalLMOutputWithPast
或一個 torch.FloatTensor
的元組(如果傳入 return_dict=False
或當 config.return_dict=False
時),其中包含各種元素,具體取決於配置 (IdeficsConfig) 和輸入。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
logits (形狀為
(batch_size, sequence_length, config.vocab_size)
的torch.FloatTensor
) — 語言建模頭部的預測分數(SoftMax 之前的每個詞彙標記的分數)。 -
past_key_values (
tuple(tuple(torch.FloatTensor))
,可選,當傳入use_cache=True
或當config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
image_hidden_states (
tuple(torch.FloatTensor)
,可選) —torch.FloatTensor
的元組(一個用於影像嵌入的輸出,(batch_size, num_images, sequence_length, hidden_size)
。模型由視覺編碼器生成,可選由感知器生成的影像隱藏狀態
IdeficsForVisionText2Text forward 方法,覆蓋 __call__
特殊方法。
儘管前向傳播的配方需要在此函式中定義,但此後應呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默忽略它們。
示例
>>> from transformers import AutoProcessor, IdeficsForVisionText2Text
>>> model = IdeficsForVisionText2Text.from_pretrained("HuggingFaceM4/idefics-9b")
>>> processor = AutoProcessor.from_pretrained("HuggingFaceM4/idefics-9b")
>>> dogs_image_url_1 = "https://huggingface.co/datasets/hf-internal-testing/fixtures_nlvr2/raw/main/image1.jpeg"
>>> dogs_image_url_2 = "https://huggingface.co/datasets/hf-internal-testing/fixtures_nlvr2/raw/main/image2.jpeg"
>>> prompts = [
... [
... "User:",
... dogs_image_url_1,
... "Describe this image.\nAssistant: An image of two dogs.\n",
... "User:",
... dogs_image_url_2,
... "Describe this image.\nAssistant:",
... ]
... ]
>>> inputs = processor(prompts, return_tensors="pt")
>>> generate_ids = model.generate(**inputs, max_new_tokens=6)
>>> processor.batch_decode(generate_ids, skip_special_tokens=True)
TFIdeficsModel
呼叫
< source >( input_ids: TFModelInputType | None = None attention_mask: Optional[tf.Tensor] = None position_ids: Optional[tf.Tensor] = None past_key_values: Optional[list[tf.Tensor]] = None inputs_embeds: Optional[tf.Tensor] = None pixel_values: Optional[tf.Tensor] = None image_encoder_embeddings: Optional[tf.Tensor] = None perceiver_embeddings: Optional[tf.Tensor] = None image_attention_mask: Optional[tf.Tensor] = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None interpolate_pos_encoding: Optional[bool] = False return_dict: Optional[bool] = None training: Optional[bool] = None )
TFIdeficsForVisionText2Text
呼叫
< source >( input_ids: TFModelInputType | None = None attention_mask: Optional[tf.Tensor] = None position_ids: Optional[tf.Tensor] = None past_key_values: Optional[list[tf.Tensor]] = None inputs_embeds: Optional[tf.Tensor] = None pixel_values: Optional[tf.Tensor] = None image_encoder_embeddings: Optional[tf.Tensor] = None perceiver_embeddings: Optional[tf.Tensor] = None image_attention_mask: Optional[tf.Tensor] = None labels: Optional[tf.Tensor] = None use_cache: Optional[bool] = None output_attentions: Optional[bool] = None output_hidden_states: Optional[bool] = None interpolate_pos_encoding: Optional[bool] = False return_dict: Optional[bool] = None training = False ) → transformers.models.idefics.modeling_tf_idefics.TFIdeficsCausalLMOutputWithPast
或 tuple(tf.Tensor)
引數
- input_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
) — 詞彙表中輸入序列標記的索引。如果提供,預設情況下會忽略填充。可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
- attention_mask (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充標記索引執行注意力的掩碼。掩碼值選擇範圍為[0, 1]
:- 1 表示未被掩蓋的標記,
- 0 表示被掩蓋的標記。
可以使用 AutoTokenizer 獲取索引。有關詳細資訊,請參見 PreTrainedTokenizer.encode() 和 PreTrainedTokenizer.call()。
如果使用
past_key_values
,則可選只輸入最後一個decoder_input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的)(參見past_key_values
)。如果想更改填充行為,應閱讀
modeling_opt._prepare_decoder_attention_mask
並根據需要進行修改。有關預設策略的更多資訊,請參見論文中的圖 1。- 1 表示頭部未被掩蓋,
- 0 表示頭部被掩蓋。
- position_ids (
tf.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。什麼是位置 ID? - past_key_values (
tuple(tuple(tf.Tensor))
,可選,當傳入use_cache=True
或當config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(tf.Tensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)和 2 個額外形狀為(batch_size, num_heads, encoder_sequence_length, embed_size_per_head)
的張量。包含預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。如果使用
past_key_values
,使用者可以選擇只輸入最後一個decoder_input_ids
(那些沒有將其過去的鍵值狀態提供給此模型的),而不是形狀為(batch_size, sequence_length)
的所有decoder_input_ids
。 - inputs_embeds (
tf.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 可選引數,可以直接傳入嵌入式表示,而不是傳入input_ids
。如果你想對如何將input_ids
索引轉換為相關向量擁有比模型內部嵌入查詢矩陣更多的控制權,這將非常有用。 - use_cache (
bool
,可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
,可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參見返回張量下的attentions
。 - output_hidden_states (
bool
,可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參見返回張量下的hidden_states
。 - return_dict (
bool
,可選) — 是否返回 ModelOutput 而不是普通元組。 - labels (形狀為
(batch_size, sequence_length)
的tf.Tensor
,可選) — 用於計算掩碼語言建模損失的標籤。索引應為[0, ..., config.vocab_size]
或 -100 (參見input_ids
文件字串)。索引設定為-100
的標記將被忽略(掩碼),損失僅針對標籤在[0, ..., config.vocab_size]
中的標記計算。
返回
transformers.models.idefics.modeling_tf_idefics.TFIdeficsCausalLMOutputWithPast
或 tuple(tf.Tensor)
一個 transformers.models.idefics.modeling_tf_idefics.TFIdeficsCausalLMOutputWithPast
或一個 tf.Tensor
元組 (如果傳入 return_dict=False
或當 config.return_dict=False
時),包含根據配置 (IdeficsConfig) 和輸入的不同元素。
-
loss (形狀為
(1,)
的tf.Tensor
,可選,當提供labels
時返回) — 語言建模損失 (用於下一標記預測)。 -
logits (
tf.Tensor
of shape(batch_size, sequence_length, config.vocab_size)
) — 語言模型頭部的預測分數(SoftMax 之前每個詞彙標記的分數)。 -
past_key_values (
tuple(tuple(tf.Tensor))
,可選,當傳入use_cache=True
或當config.use_cache=True
時返回) — 長度為config.n_layers
的tuple(tf.Tensor)
元組,每個元組包含 2 個形狀為(batch_size, num_heads, sequence_length, embed_size_per_head)
的張量)。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。 -
hidden_states (
tuple(tf.Tensor)
,可選,當傳入output_hidden_states=True
或當config.output_hidden_states=True
時返回) — 形狀為(batch_size, sequence_length, hidden_size)
的tf.Tensor
元組 (一個用於嵌入層的輸出,如果模型有嵌入層,+ 一個用於每層的輸出)。模型在每個層輸出的隱藏狀態以及可選的初始嵌入輸出。
-
attentions (
tuple(tf.Tensor)
,可選,當傳入output_attentions=True
或當config.output_attentions=True
時返回) — 形狀為(batch_size, num_heads, sequence_length, sequence_length)
的tf.Tensor
元組 (每層一個)。注意力 softmax 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
image_hidden_states (
tuple(tf.Tensor)
,可選) — 形狀為(batch_size, num_images, sequence_length, hidden_size)
的tf.Tensor
元組 (一個用於影像嵌入的輸出)。模型由視覺編碼器生成,可選由感知器生成的影像隱藏狀態
TFIdeficsForVisionText2Text 的前向方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的配方需要在此函式中定義,但此後應呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默忽略它們。
示例
>> from transformers import AutoTokenizer, TFIdeficsForVisionText2Text
>> model = TFIdeficsForVisionText2Text.from_pretrained("HuggingFaceM4/idefics-9b")
>> tokenizer = AutoTokenizer.from_pretrained("HuggingFaceM4/idefics-9b")
>> prompt = "Hey, are you consciours? Can you talk to me?"
>> inputs = tokenizer(prompt, return_tensors="tf")
>> # Generate
>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"Hey, are you consciours? Can you talk to me?\nI'm not consciours, but I can talk to you."
IdeficsImageProcessor
class transformers.IdeficsImageProcessor
< source >( image_size: int = 224 image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None image_num_channels: typing.Optional[int] = 3 do_rescale: bool = True rescale_factor: typing.Union[int, float] = 0.00392156862745098 **kwargs )
引數
- image_size (
int
,可選,預設為 224) — 將圖片大小調整為該值。 - image_mean (
float
或list[float]
,可選,預設為IDEFICS_STANDARD_MEAN
) — 如果對影像進行歸一化,則使用的均值。這是一個浮點數或浮點數列表,其長度與影像中的通道數相同。可以透過preprocess
方法中的image_mean
引數覆蓋。 - image_std (
float
或list[float]
,可選,預設為IDEFICS_STANDARD_STD
) — 如果對影像進行歸一化,則使用的標準差。這是一個浮點數或浮點數列表,其長度與影像中的通道數相同。可以透過preprocess
方法中的image_std
引數覆蓋。 - image_num_channels (
int
,可選,預設為 3) — 影像通道數。 - do_rescale (
bool
,可選,預設為True
) — 是否按指定的縮放因子rescale_factor
重新縮放影像。可以透過preprocess
方法中的do_rescale
覆蓋。 - rescale_factor (
int
或float
,可選,預設為1/255
) — 如果對影像進行重新縮放,則使用的縮放因子。可以透過preprocess
方法中的rescale_factor
覆蓋。
構建 Idefics 影像處理器。
預處理
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] image_num_channels: typing.Optional[int] = 3 image_size: typing.Optional[dict[str, int]] = None image_mean: typing.Union[float, list[float], NoneType] = None image_std: typing.Union[float, list[float], NoneType] = None transform: typing.Optional[typing.Callable] = None do_rescale: typing.Optional[bool] = None rescale_factor: typing.Optional[float] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = <TensorType.PYTORCH: 'pt'> **kwargs )
引數
- images (
ImageInput
) — 要預處理的影像列表。 - image_size (
int
,可選,預設為self.image_size
) — 將圖片大小調整為該值。 - image_num_channels (
int
,可選,預設為self.image_num_channels
) — 影像通道數。 - image_mean (
float
或list[float]
,可選,預設為IDEFICS_STANDARD_MEAN
) — 如果對影像進行歸一化,則使用的均值。這是一個浮點數或浮點數列表,其長度與影像中的通道數相同。可以透過preprocess
方法中的image_mean
引數覆蓋。 - image_std (
float
或list[float]
,可選,預設為IDEFICS_STANDARD_STD
) — 如果對影像進行歸一化,則使用的標準差。這是一個浮點數或浮點數列表,其長度與影像中的通道數相同。可以透過preprocess
方法中的image_std
引數覆蓋。 - transform (
Callable
,可選,預設為None
) — 可以傳入一個自定義的轉換函式,接受單個影像用於訓練。例如,torchvision.Compose
可用於組合多個轉換。如果為None
- 則假定為推理模式 - 然後將一套推理專用轉換應用於影像。 - do_rescale (
bool
,可選,預設為True
) — 是否按指定的縮放因子rescale_factor
重新縮放影像。可以透過preprocess
方法中的do_rescale
覆蓋。 - rescale_factor (
int
或float
,可選,預設為1/255
) — 如果對影像進行重新縮放,則使用的縮放因子。可以透過preprocess
方法中的rescale_factor
覆蓋。
預處理一批影像。
IdeficsProcessor
class transformers.IdeficsProcessor
< source >( image_processor tokenizer = None image_size = 224 add_end_of_utterance_token = None **kwargs )
引數
- image_processor (
IdeficsImageProcessor
) — 一個 IdeficsImageProcessor 例項。影像處理器是必需輸入。 - tokenizer (
LlamaTokenizerFast
) — 一個 LlamaTokenizerFast 例項。分詞器是必需輸入。 - image_size (
int
,可選,預設為 224) — 影像尺寸 (假定為方形影像)。 - add_end_of_utterance_token (
str
,可選) — 表示話語結束的標記的字串表示。
構建一個 IDEFICS 處理器,它將 LLama 分詞器和 IDEFICS 影像處理器封裝到一個處理器中。
IdeficsProcessor 提供了 IdeficsImageProcessor 和 LlamaTokenizerFast 的所有功能。有關更多資訊,請參閱 **call**() 和 decode()
的文件字串。
__call__
< source >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor'], list[typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']]], str, list[str], list[list[str]]] = None text: typing.Union[str, list[str], list[list[str]], list[list[list[str]]]] = None audio = None videos = None **kwargs: typing_extensions.Unpack[transformers.models.idefics.processing_idefics.IdeficsProcessorKwargs] ) → 一個包含條目的字典
引數
- images (
Union[ImageInput, list[ImageInput], str, list[str], list[list[str]]]
) — 單個影像或批次影像列表 - 當文字僅包含文字提示時,可以傳入此引數以使用影像-文字-文字行為。 - text (
Union[list[TextInput], [list[list[TextInput]]]]
) — 單個提示或批次提示列表 - 請參閱引數文件部分結束後的詳細說明。 - return_tensors (
str
或TensorType
,可選,預設為TensorType.PYTORCH
) — 返回張量的型別。可以是以下之一:TensorType.PYTORCH
或'pt'
:返回torch.Tensor
型別的批處理。
返回
一個包含條目的字典
input_ids
、attention_mask
、pixel_values
、image_attention_mask
,可以直接傳遞給 model.generate
此方法接收由文字和影像組成的批處理或非批處理提示,並將它們轉換為模型訓練所用的提示,並準備影像畫素值供模型處理。
詳細解釋
text
中的每個條目都是一個可以直接傳遞的文字,或一個將被處理的影像。
影像可以是影像物件(PIL.Image
)或可以從中檢索影像的 URL。
當處理器遇到影像時,它將在提示中注入
條目。
示例
checkpoint = "HuggingFaceM4/idefics-9b"
processor = AutoProcessor.from_pretrained(checkpoint)
url = "https://hips.hearstapps.com/hmg-prod/images/cute-photos-of-cats-in-grass-1593184777.jpg"
img = processor.image_processor.fetch_images([url])[0]
prompts = [
"User:",
img,
"Describe this image.
t: An image of two kittens in grass.
"User:",
"https://hips.hearstapps.com/hmg-prod/images/dog-puns-1581708208.jpg",
"Describe this image.
t:",
]
inputs = processor(text=prompts, return_tensors="pt")
generated_ids = model.generate(**inputs, max_length=100)
generated_text = processor.batch_decode(generated_ids, skip_special_tokens=True)[0]
在此示例中,prompts
將轉換為
<s>User:<fake_token_around_image><image><fake_token_around_image>Describe this image.
Assistant: An image of two kittens in grass.
User:<fake_token_around_image><image><fake_token_around_image>Describe this image.
Assistant:'
這兩個影像將使用 IdeficsImageProcessor.**call**() 方法進行處理,並放置在返回值的 pixel_values
字典條目中。
此示例還展示了影像可以作為物件或作為文字 URL 傳遞。可以看出,第一個影像作為物件傳遞,第二個影像作為 URL 傳遞。
進行訓練
image_transform = transforms.Compose(
[
transforms.RandomResizedCrop(
(w, h), scale=(0.9, 1.0), interpolation=transforms.InterpolationMode.BICUBIC
),
transforms.ToTensor(),
transforms.Normalize(mean=self.image_mean, std=self.image_std),
]
)
inputs = processor(text=prompts, transform=image_transform, return_tensors="pt")
為了幫助除錯提示生成,請啟用 debug=True
,它將顯示正在發生的情況。