Transformers 文件
ImageGPT
並獲得增強的文件體驗
開始使用
ImageGPT
概述
ImageGPT 模型由 Mark Chen, Alec Radford, Rewon Child, Jeffrey Wu, Heewoo Jun, David Luan, Ilya Sutskever 在 Generative Pretraining from Pixels 中提出。ImageGPT (iGPT) 是一個類似 GPT-2 的模型,經過訓練可預測下一個畫素值,從而實現無條件和有條件的影像生成。
論文摘要如下:
受自然語言無監督表示學習進展的啟發,我們研究了類似模型是否可以學習影像的有用表示。我們訓練了一個序列 Transformer 來自迴歸預測畫素,而不結合 2D 輸入結構的知識。儘管在低解析度 ImageNet 上進行無標籤訓練,我們發現 GPT-2 規模的模型學習到了強大的影像表示,這透過線性探測、微調和低資料分類來衡量。在 CIFAR-10 上,我們使用線性探測達到了 96.3% 的準確率,優於有監督的 Wide ResNet,透過完全微調達到了 99.0% 的準確率,與頂級的有監督預訓練模型相當。當我們用 VQVAE 編碼替換畫素時,我們在 ImageNet 上的自監督基準方面也具有競爭力,線上性探測我們的特徵時達到了 69.0% 的 top-1 準確率。

該模型由 nielsr 貢獻,基於 此問題。原始程式碼可在 此處 找到。
使用技巧
- ImageGPT 幾乎與 GPT-2 完全相同,不同之處在於使用了不同的啟用函式(即“quick gelu”),並且層歸一化層不會對輸入進行均值居中。ImageGPT 也沒有繫結的輸入和輸出嵌入。
- 由於 Transformer 注意力機制的時間和記憶體需求與序列長度呈平方關係,作者對 ImageGPT 進行了較小輸入解析度的預訓練,例如 32x32 和 64x64。然而,將 32x32x3=3072 個 0..255 範圍的 token 序列輸入到 Transformer 中仍然過於龐大。因此,作者對 (R,G,B) 畫素值應用了 k-means 聚類,k=512。這樣,我們只有一個 32*32 = 1024 長的序列,但現在是 0..511 範圍的整數。因此,我們以犧牲更大的嵌入矩陣為代價縮小了序列長度。換句話說,ImageGPT 的詞彙表大小為 512,再加上一個特殊的“句子開始”(SOS) token,用於每個序列的開頭。可以使用 ImageGPTImageProcessor 來準備模型影像。
- 儘管 ImageGPT 完全是無監督預訓練(即不使用任何標籤),但它產生了相當高效能的影像特徵,可用於下游任務,例如影像分類。作者表明,網路中間的特徵效能最佳,並且可以按原樣用於訓練線性模型(例如 sklearn 邏輯迴歸模型)。這也被稱為“線性探測”。透過首先將影像透過模型轉發,然後指定
output_hidden_states=True
,然後對您喜歡的任何層上的隱藏狀態進行平均池化,可以輕鬆獲得特徵。 - 或者,可以像 BERT 一樣在下游資料集上進一步微調整個模型。為此,可以使用 ImageGPTForImageClassification。
- ImageGPT 有不同的尺寸:ImageGPT-small、ImageGPT-medium 和 ImageGPT-large。作者還訓練了一個 XL 變體,但沒有釋出。尺寸差異總結在下表中:
模型變體 | 深度 | 隱藏層大小 | 解碼器隱藏層大小 | 引數 (M) | ImageNet-1k Top 1 |
---|---|---|---|---|---|
MiT-b0 | [2, 2, 2, 2] | [32, 64, 160, 256] | 256 | 3.7 | 70.5 |
MiT-b1 | [2, 2, 2, 2] | [64, 128, 320, 512] | 256 | 14.0 | 78.7 |
MiT-b2 | [3, 4, 6, 3] | [64, 128, 320, 512] | 768 | 25.4 | 81.6 |
MiT-b3 | [3, 4, 18, 3] | [64, 128, 320, 512] | 768 | 45.2 | 83.1 |
MiT-b4 | [3, 8, 27, 3] | [64, 128, 320, 512] | 768 | 62.6 | 83.6 |
MiT-b5 | [3, 6, 40, 3] | [64, 128, 320, 512] | 768 | 82.0 | 83.8 |
資源
官方 Hugging Face 和社群(由 🌎 表示)資源列表,可幫助您開始使用 ImageGPT。
- ImageGPT 的演示筆記本可以在 這裡 找到。
- ImageGPTForImageClassification 由此 示例指令碼 和 筆記本 支援。
- 另請參閱:影像分類任務指南
如果您有興趣在此處提交資源,請隨時開啟 Pull Request,我們將對其進行審查!該資源最好能展示一些新內容,而不是重複現有資源。
ImageGPTConfig
class transformers.ImageGPTConfig
< 源 >( vocab_size = 513 n_positions = 1024 n_embd = 512 n_layer = 24 n_head = 8 n_inner = None activation_function = 'quick_gelu' resid_pdrop = 0.1 embd_pdrop = 0.1 attn_pdrop = 0.1 layer_norm_epsilon = 1e-05 initializer_range = 0.02 scale_attn_weights = True use_cache = True tie_word_embeddings = False scale_attn_by_inverse_layer_idx = False reorder_and_upcast_attn = False **kwargs )
引數
- vocab_size (
int
, 可選, 預設為 512) — GPT-2 模型的詞彙表大小。定義了呼叫 ImageGPTModel 或TFImageGPTModel
時可以由inputs_ids
表示的不同 token 的數量。 - n_positions (
int
, 可選, 預設為 32*32) — 該模型可能使用的最大序列長度。通常將其設定為一個較大的值以備不時之需(例如,512、1024 或 2048)。 - n_embd (
int
, 可選, 預設為 512) — 嵌入和隱藏狀態的維度。 - n_layer (
int
, 可選, 預設為 24) — Transformer 編碼器中的隱藏層數量。 - n_head (
int
, 可選, 預設為 8) — Transformer 編碼器中每個注意力層的注意力頭數量。 - n_inner (
int
, 可選, 預設為 None) — 內部前饋層的維度。None
將其設定為 n_embd 的 4 倍。 - activation_function (
str
, 可選, 預設為"quick_gelu"
) — 啟用函式(可以是 src/transformers/activations.py 中定義的啟用函式之一)。預設為“quick_gelu”。 - resid_pdrop (
float
, 可選, 預設為 0.1) — 嵌入、編碼器和池化器中所有全連線層的 dropout 機率。 - embd_pdrop (
int
, 可選, 預設為 0.1) — 嵌入的 dropout 比率。 - attn_pdrop (
float
, 可選, 預設為 0.1) — 注意力的 dropout 比率。 - layer_norm_epsilon (
float
, 可選, 預設為 1e-5) — 在層歸一化層中使用的 epsilon。 - initializer_range (
float
, 可選, 預設為 0.02) — 用於初始化所有權重矩陣的截斷正態分佈初始化器的標準差。 - scale_attn_weights (
bool
, 可選, 預設為True
) — 透過除以 sqrt(hidden_size) 來縮放注意力權重。 - use_cache (
bool
, 可選, 預設為True
) — 模型是否應返回最後一個 key/values 注意力(並非所有模型都使用)。 - scale_attn_by_inverse_layer_idx (
bool
, 可選, 預設為False
) — 是否額外透過1 / layer_idx + 1
來縮放注意力權重。 - reorder_and_upcast_attn (
bool
, 可選, 預設為False
) — 是否在計算注意力(點積)之前縮放鍵(K),並在使用混合精度訓練時將注意力點積/softmax 上轉換為 float()。
這是用於儲存 ImageGPTModel 或 TFImageGPTModel
配置的配置類。它用於根據指定引數例項化 GPT-2 模型,定義模型架構。使用預設值例項化配置將產生與 ImageGPT openai/imagegpt-small 架構類似的配置。
配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請參閱 PretrainedConfig 文件。
示例
>>> from transformers import ImageGPTConfig, ImageGPTModel
>>> # Initializing a ImageGPT configuration
>>> configuration = ImageGPTConfig()
>>> # Initializing a model (with random weights) from the configuration
>>> model = ImageGPTModel(configuration)
>>> # Accessing the model configuration
>>> configuration = model.config
ImageGPTFeatureExtractor
預處理單張或批次影像。
ImageGPTImageProcessor
class transformers.ImageGPTImageProcessor
< 源 >( clusters: typing.Union[list[list[int]], numpy.ndarray, NoneType] = None do_resize: bool = True size: typing.Optional[dict[str, int]] = None resample: Resampling = <Resampling.BILINEAR: 2> do_normalize: bool = True do_color_quantize: bool = True **kwargs )
引數
- clusters (
np.ndarray
或list[list[int]]
, 可選) — 顏色量化時使用的顏色簇,形狀為(n_clusters, 3)
。可透過preprocess
中的clusters
覆蓋。 - do_resize (
bool
, 可選, 預設為True
) — 是否將影像尺寸調整為(size["height"], size["width"])
。可透過preprocess
中的do_resize
覆蓋。 - size (
dict[str, int]
可選, 預設為{"height" -- 256, "width": 256}
): 調整大小後圖像的尺寸。可透過preprocess
中的size
覆蓋。 - resample (
PILImageResampling
, 可選, 預設為Resampling.BILINEAR
) — 如果調整影像大小,要使用的重取樣過濾器。可透過preprocess
中的resample
覆蓋。 - do_normalize (
bool
, 可選, 預設為True
) — 是否將影像畫素值歸一化到 [-1, 1] 之間。可透過preprocess
中的do_normalize
覆蓋。 - do_color_quantize (
bool
, 可選, 預設為True
) — 是否對影像進行顏色量化。可透過preprocess
中的do_color_quantize
覆蓋。
構建 ImageGPT 影像處理器。此影像處理器可用於將影像調整為較小的解析度(例如 32x32 或 64x64),對其進行歸一化,並最終對其進行顏色量化以獲得“畫素值”(顏色簇)序列。
preprocess
< 源 >( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_resize: typing.Optional[bool] = None size: typing.Optional[dict[str, int]] = None resample: Resampling = None do_normalize: typing.Optional[bool] = None do_color_quantize: typing.Optional[bool] = None clusters: typing.Union[list[list[int]], numpy.ndarray, NoneType] = None return_tensors: typing.Union[str, transformers.utils.generic.TensorType, NoneType] = None data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = <ChannelDimension.FIRST: 'channels_first'> input_data_format: typing.Union[str, transformers.image_utils.ChannelDimension, NoneType] = None )
引數
- images (
ImageInput
) — 要預處理的影像。期望單個或批次影像,畫素值範圍為 0 到 255。如果傳入的影像畫素值在 0 到 1 之間,請設定do_normalize=False
。 - do_resize (
bool
, 可選, 預設為self.do_resize
) — 是否調整影像大小。 - size (
dict[str, int]
, 可選, 預設為self.size
) — 調整大小後的影像尺寸。 - resample (
int
, 可選, 預設為self.resample
) — 如果影像需要調整大小,則使用的重取樣濾波器。這可以是列舉PILImageResampling
之一。僅在do_resize
設定為True
時有效。 - do_normalize (
bool
, 可選, 預設為self.do_normalize
) — 是否對影像進行歸一化。 - do_color_quantize (
bool
, 可選, 預設為self.do_color_quantize
) — 是否對影像進行顏色量化。 - clusters (
np.ndarray
或list[list[int]]
, 可選, 預設為self.clusters
) — 用於量化影像的簇,形狀為(n_clusters, 3)
。僅在do_color_quantize
設定為True
時有效。 - return_tensors (
str
或TensorType
, 可選) — 要返回的張量型別。可以是以下之一:- 未設定:返回
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
, 可選, 預設為ChannelDimension.FIRST
) — 輸出影像的通道維度格式。可以是以下之一:ChannelDimension.FIRST
:影像為 (num_channels, height, width) 格式。ChannelDimension.LAST
:影像為 (height, width, num_channels) 格式。僅在do_color_quantize
設定為False
時有效。
- input_data_format (
ChannelDimension
或str
, 可選) — 輸入影像的通道維度格式。如果未設定,則從輸入影像推斷通道維度格式。可以是以下之一:"channels_first"
或ChannelDimension.FIRST
:影像為 (num_channels, height, width) 格式。"channels_last"
或ChannelDimension.LAST
:影像為 (height, width, num_channels) 格式。"none"
或ChannelDimension.NONE
:影像為 (height, width) 格式。
預處理一張或一批影像。
ImageGPTModel
class transformers.ImageGPTModel
< source >( config: ImageGPTConfig )
引數
- config (ImageGPTConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。檢視 from_pretrained() 方法載入模型權重。
輸出原始隱藏狀態的裸 Imagegpt 模型,頂部沒有任何特定頭部。
此模型繼承自 PreTrainedModel。檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解與一般用法和行為相關的所有事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.Tensor] = None encoder_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 return_dict: typing.Optional[bool] = None **kwargs: typing.Any ) → transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
) — 如果past_key_values
為None
,則input_ids_length
=sequence_length
;否則為past_key_values[0][0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列標記的索引。如果使用
past_key_values
,則只有未計算過其過去的input_ids
應作為input_ids
傳入。索引可以使用 AutoImageProcessor 獲取。詳情請參閱 ImageGPTImageProcessor.call()。
- past_key_values (
tuple[tuple[torch.Tensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常由模型在解碼的先前階段返回的past_key_values
組成,當use_cache=True
或config.use_cache=True
時。允許兩種格式:
- 一個 Cache 例項,請參閱我們的 kv cache 指南;
- 一個長度為
config.n_layers
的tuple(torch.FloatTensor)
元組,每個元組包含 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
。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 掩碼,用於避免對填充標記索引執行注意力操作。掩碼值選擇在[0, 1]
之間:- 1 表示未掩碼的標記,
- 0 表示已掩碼的標記。
- token_type_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 片段標記索引,用於指示輸入的第一個和第二個部分。索引選擇在[0, 1]
之間:- 0 對應於 句子 A 標記,
- 1 對應於 句子 B 標記。
- position_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 掩碼,用於將自注意力模組的選定頭部置空。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- inputs_embeds (
torch.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,您可以選擇直接傳入嵌入表示,而不是傳入input_ids
。如果您想更好地控制如何將input_ids
索引轉換為相關向量,而不是模型的內部嵌入查詢矩陣,這會很有用。 - encoder_hidden_states (
torch.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型配置為解碼器,則用於交叉注意力。 - encoder_attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 掩碼,用於避免對編碼器輸入中的填充標記索引執行注意力操作。如果模型配置為解碼器,則此掩碼用於交叉注意力。掩碼值選擇在[0, 1]
之間:- 1 表示未掩碼的標記,
- 0 表示已掩碼的標記。
- use_cache (
bool
, 可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參閱past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。有關更多詳細資訊,請參閱返回張量下的attentions
。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。有關更多詳細資訊,請參閱返回張量下的hidden_states
。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentions 或一個 torch.FloatTensor
元組(如果傳入 return_dict=False
或當 config.return_dict=False
時),包含根據配置(ImageGPTConfig)和輸入的不同元素。
-
last_hidden_state (
torch.FloatTensor
, 形狀為(batch_size, sequence_length, hidden_size)
) — 模型最後一層輸出的隱藏狀態序列。如果使用了
past_key_values
,則只輸出形狀為(batch_size, 1, hidden_size)
的序列的最後一個隱藏狀態。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或當config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(自注意力塊中的鍵和值,如果
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
-
cross_attentions (
tuple(torch.FloatTensor)
, 可選, 當傳入output_attentions=True
和config.add_cross_attention=True
或當config.output_attentions=True
時返回) —torch.FloatTensor
的元組(每一層一個),形狀為(batch_size, num_heads, sequence_length, sequence_length)
。解碼器交叉注意力層的注意力權重,在注意力 softmax 之後,用於計算交叉注意力頭中的加權平均。
ImageGPTModel 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現應在此函式中定義,但在此之後應呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者會默默忽略它們。
示例
>>> from transformers import AutoImageProcessor, ImageGPTModel
>>> 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("openai/imagegpt-small")
>>> model = ImageGPTModel.from_pretrained("openai/imagegpt-small")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> last_hidden_states = outputs.last_hidden_state
ImageGPTForCausalImageModeling
class transformers.ImageGPTForCausalImageModeling
< source >( config: ImageGPTConfig )
引數
- config (ImageGPTConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。檢視 from_pretrained() 方法載入模型權重。
帶有語言建模頭(權重與輸入嵌入繫結)的 ImageGPT 模型 Transformer。
此模型繼承自 PreTrainedModel。檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解與一般用法和行為相關的所有事項。
forward
< source >( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None encoder_hidden_states: typing.Optional[torch.Tensor] = None encoder_attention_mask: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs: typing.Any ) → transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
) — 如果past_key_values
為None
,則input_ids_length
=sequence_length
;否則為past_key_values[0][0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列標記的索引。如果使用
past_key_values
,則只有未計算過其過去的input_ids
應作為input_ids
傳入。索引可以使用 AutoImageProcessor 獲取。詳情請參閱 ImageGPTImageProcessor.call()。
- past_key_values (
tuple[tuple[torch.Tensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常由模型在解碼的先前階段返回的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
,使用者可以選擇只輸入形狀為(batch_size, 1)
的最後input_ids
(那些沒有將過去的鍵值狀態提供給此模型的),而不是形狀為(batch_size, sequence_length)
的所有input_ids
。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 掩碼,用於避免對填充標記索引執行注意力操作。掩碼值選擇在[0, 1]
之間:- 1 表示未掩碼的標記,
- 0 表示已掩碼的標記。
- token_type_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 片段標記索引,用於指示輸入的第一個和第二個部分。索引選擇在[0, 1]
之間:- 0 對應於 句子 A 標記,
- 1 對應於 句子 B 標記。
- position_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
, 可選) — 掩碼,用於將自注意力模組的選定頭部置空。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩碼,
- 0 表示頭部已被掩碼。
- inputs_embeds (
torch.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 可選地,您可以選擇直接傳入嵌入表示,而不是傳入input_ids
。如果您想更好地控制如何將input_ids
索引轉換為相關向量,而不是模型的內部嵌入查詢矩陣,這會很有用。 - encoder_hidden_states (
torch.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
, 可選) — 編碼器最後一層輸出的隱藏狀態序列。如果模型配置為解碼器,則用於交叉注意力。 - encoder_attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
, 可選) — 掩碼,用於避免對編碼器輸入中的填充標記索引執行注意力操作。如果模型配置為解碼器,則此掩碼用於交叉注意力。掩碼值選擇在[0, 1]
之間:- 1 表示未掩碼的標記,
- 0 表示已掩碼的標記。
- labels (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
, 可選) — 用於語言建模的標籤。請注意,標籤在模型內部會進行偏移,即您可以設定labels = input_ids
。索引選擇在[-100, 0, ..., config.vocab_size]
之間。所有設定為-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`。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.CausalLMOutputWithCrossAttentions 或者一個 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或者 config.return_dict=False
),包含根據配置 (ImageGPTConfig) 和輸入的不同元素。
-
loss (
torch.FloatTensor
形狀為(1,)
,可選,當提供labels
時返回) — 語言建模損失(用於下一個 token 預測)。 -
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 後的交叉注意力權重,用於計算交叉注意力頭中的加權平均。
-
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或當config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預先計算的隱藏狀態(注意力塊中的鍵和值),可用於(參見
past_key_values
輸入)加速順序解碼。
ImageGPTForCausalImageModeling 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現應在此函式中定義,但在此之後應呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者會默默忽略它們。
示例
>>> from transformers import AutoImageProcessor, ImageGPTForCausalImageModeling
>>> import torch
>>> import matplotlib.pyplot as plt
>>> import numpy as np
>>> image_processor = AutoImageProcessor.from_pretrained("openai/imagegpt-small")
>>> model = ImageGPTForCausalImageModeling.from_pretrained("openai/imagegpt-small")
>>> device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
>>> model.to(device)
>>> # unconditional generation of 8 images
>>> batch_size = 4
>>> context = torch.full((batch_size, 1), model.config.vocab_size - 1) # initialize with SOS token
>>> context = context.to(device)
>>> output = model.generate(
... input_ids=context, max_length=model.config.n_positions + 1, temperature=1.0, do_sample=True, top_k=40
... )
>>> clusters = image_processor.clusters
>>> height = image_processor.size["height"]
>>> width = image_processor.size["width"]
>>> samples = output[:, 1:].detach().cpu().numpy()
>>> samples_img = [
... np.reshape(np.rint(127.5 * (clusters[s] + 1.0)), [height, width, 3]).astype(np.uint8) for s in samples
... ] # convert color cluster tokens back to pixels
>>> f, axes = plt.subplots(1, batch_size, dpi=300)
>>> for img, ax in zip(samples_img, axes):
... ax.axis("off")
... ax.imshow(img)
ImageGPTForImageClassification
class transformers.ImageGPTForImageClassification
< 源 >( config: ImageGPTConfig )
引數
- config (ImageGPTConfig) — 模型配置類,包含模型的所有引數。使用配置檔案初始化不載入與模型相關的權重,只加載配置。請查閱 from_pretrained() 方法載入模型權重。
帶有影像分類頭部(線性層)的 ImageGPT 模型變換器。ImageGPTForImageClassification 透過平均池化隱藏狀態來進行分類。
此模型繼承自 PreTrainedModel。檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭部等)。
此模型也是 PyTorch torch.nn.Module 子類。將其作為常規 PyTorch 模組使用,並參考 PyTorch 文件以瞭解與一般用法和行為相關的所有事項。
forward
< 源 >( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[tuple[tuple[torch.Tensor]]] = None attention_mask: typing.Optional[torch.Tensor] = None token_type_ids: typing.Optional[torch.Tensor] = None position_ids: typing.Optional[torch.Tensor] = None head_mask: typing.Optional[torch.Tensor] = None inputs_embeds: typing.Optional[torch.Tensor] = None labels: typing.Optional[torch.Tensor] = None use_cache: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None output_hidden_states: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None **kwargs: typing.Any ) → transformers.modeling_outputs.SequenceClassifierOutputWithPast
或 tuple(torch.FloatTensor)
引數
- input_ids (
torch.LongTensor
,形狀為(batch_size, input_ids_length)
) —input_ids_length
=sequence_length
如果past_key_values
為None
,否則為past_key_values[0][0].shape[-2]
(輸入過去鍵值狀態的sequence_length
)。詞彙表中輸入序列 token 的索引。如果使用了
past_key_values
,則只有未計算過其過去的input_ids
才應作為input_ids
傳入。索引可以使用 AutoImageProcessor 獲取。更多詳情請參閱 ImageGPTImageProcessor.__call__()。
- past_key_values (
tuple[tuple[torch.Tensor]]
, 可選) — 預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常由模型在解碼前一階段返回的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
,使用者可以選擇只輸入最後一個input_ids
(那些沒有將它們的過去鍵值狀態提供給此模型的)的形狀(batch_size, 1)
,而不是所有input_ids
的形狀(batch_size, sequence_length)
。 - attention_mask (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 用於避免對填充 token 索引執行注意力的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示 token 未被掩蓋,
- 0 表示 token 被掩蓋。
- token_type_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 段 token 索引,指示輸入的第一個和第二個部分。索引選擇在[0, 1]
之間:- 0 對應於 句子 A 的 token,
- 1 對應於 句子 B 的 token。
- position_ids (
torch.Tensor
,形狀為(batch_size, sequence_length)
,可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為[0, config.n_positions - 1]
。 - head_mask (
torch.Tensor
,形狀為(num_heads,)
或(num_layers, num_heads)
,可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選擇在[0, 1]
之間:- 1 表示頭部未被掩蓋,
- 0 表示頭部被掩蓋。
- inputs_embeds (
torch.Tensor
,形狀為(batch_size, sequence_length, hidden_size)
,可選) — 或者,您可以選擇直接傳遞嵌入表示,而不是傳遞input_ids
。如果您希望更好地控制如何將input_ids
索引轉換為關聯向量,而不是模型內部的嵌入查詢矩陣,則此功能非常有用。 - labels (
torch.LongTensor
,形狀為(batch_size,)
,可選) — 用於計算序列分類/迴歸損失的標籤。索引應在[0, ..., config.num_labels - 1]
之間。如果config.num_labels == 1
,則計算迴歸損失(均方損失),如果config.num_labels > 1
,則計算分類損失(交叉熵)。 - use_cache (
bool
, 可選) — 如果設定為True
,則返回past_key_values
鍵值狀態,可用於加速解碼(參見past_key_values
)。 - output_attentions (
bool
, 可選) — 是否返回所有注意力層的注意力張量。更多詳細資訊請參閱返回張量下的 `attentions`。 - output_hidden_states (
bool
, 可選) — 是否返回所有層的隱藏狀態。更多詳細資訊請參閱返回張量下的 `hidden_states`。 - return_dict (
bool
, 可選) — 是否返回 ModelOutput 而不是普通元組。
返回
transformers.modeling_outputs.SequenceClassifierOutputWithPast
或 tuple(torch.FloatTensor)
一個 transformers.modeling_outputs.SequenceClassifierOutputWithPast
或者一個 torch.FloatTensor
的元組 (如果傳入 return_dict=False
或者 config.return_dict=False
),包含根據配置 (ImageGPTConfig) 和輸入的不同元素。
-
loss (形狀為
(1,)
的torch.FloatTensor
,可選,當提供labels
時返回) — 分類損失(如果 config.num_labels==1,則為迴歸損失)。 -
logits (形狀為
(batch_size, config.num_labels)
的torch.FloatTensor
) — 分類(如果 config.num_labels==1,則為迴歸)分數(SoftMax 之前)。 -
past_key_values (
Cache
, 可選, 當傳入use_cache=True
或當config.use_cache=True
時返回) — 這是一個 Cache 例項。有關更多詳細資訊,請參閱我們的 kv 快取指南。包含預計算的隱藏狀態(自注意力塊中的鍵和值),可用於(參見
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 後的注意力權重,用於計算自注意力頭中的加權平均值。
ImageGPTForImageClassification 的 forward 方法,覆蓋了 __call__
特殊方法。
儘管前向傳播的實現應在此函式中定義,但在此之後應呼叫 Module
例項,而不是此函式,因為前者負責執行預處理和後處理步驟,而後者會默默忽略它們。
示例
>>> from transformers import AutoImageProcessor, ImageGPTForImageClassification
>>> 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("openai/imagegpt-small")
>>> model = ImageGPTForImageClassification.from_pretrained("openai/imagegpt-small")
>>> inputs = image_processor(images=image, return_tensors="pt")
>>> outputs = model(**inputs)
>>> logits = outputs.logits