Transformers 文件

ImageGPT

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

ImageGPT

PyTorch

概述

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 準確率。

drawing 該方法的總結。摘自 [原始論文](https://cdn.openai.com/papers/Generative_Pretraining_from_Pixels_V2.pdf)。

該模型由 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。

影像分類

如果您有興趣在此處提交資源,請隨時開啟 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 模型的詞彙表大小。定義了呼叫 ImageGPTModelTFImageGPTModel 時可以由 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()。

這是用於儲存 ImageGPTModelTFImageGPTModel 配置的配置類。它用於根據指定引數例項化 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

class transformers.ImageGPTFeatureExtractor

< >

( *args **kwargs )

__call__

< >

( images **kwargs )

預處理單張或批次影像。

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.ndarraylist[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.ndarraylist[list[int]], 可選, 預設為 self.clusters) — 用於量化影像的簇,形狀為 (n_clusters, 3)。僅在 do_color_quantize 設定為 True 時有效。
  • return_tensors (strTensorType, 可選) — 要返回的張量型別。可以是以下之一:
    • 未設定:返回 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 (ChannelDimensionstr, 可選, 預設為 ChannelDimension.FIRST) — 輸出影像的通道維度格式。可以是以下之一:
    • ChannelDimension.FIRST:影像為 (num_channels, height, width) 格式。
    • ChannelDimension.LAST:影像為 (height, width, num_channels) 格式。僅在 do_color_quantize 設定為 False 時有效。
  • input_data_format (ChannelDimensionstr, 可選) — 輸入影像的通道維度格式。如果未設定,則從輸入影像推斷通道維度格式。可以是以下之一:
    • "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

< >

( config: ImageGPTConfig )

引數

  • config (ImageGPTConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。檢視 from_pretrained() 方法載入模型權重。

輸出原始隱藏狀態的裸 Imagegpt 模型,頂部沒有任何特定頭部。

此模型繼承自 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 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.BaseModelOutputWithPastAndCrossAttentionstuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, input_ids_length)) — 如果 past_key_valuesNone,則 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=Trueconfig.use_cache=True 時。

    允許兩種格式:

    • 一個 Cache 例項,請參閱我們的 kv cache 指南
    • 一個長度為 config.n_layerstuple(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 標記。

    什麼是標記型別 ID?

  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • 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.BaseModelOutputWithPastAndCrossAttentionstuple(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=Trueconfig.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

< >

( config: ImageGPTConfig )

引數

  • config (ImageGPTConfig) — 包含模型所有引數的模型配置類。用配置檔案初始化不會載入與模型相關的權重,只會載入配置。檢視 from_pretrained() 方法載入模型權重。

帶有語言建模頭(權重與輸入嵌入繫結)的 ImageGPT 模型 Transformer。

此模型繼承自 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 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.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, input_ids_length)) — 如果 past_key_valuesNone,則 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=Trueconfig.use_cache=True 時。

    允許兩種格式:

    • 一個 Cache 例項,請參閱我們的 kv 快取指南
    • 一個長度為 config.n_layerstuple(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 標記。

    什麼是標記型別 ID?

  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length), 可選) — 每個輸入序列標記在位置嵌入中的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • 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.CausalLMOutputWithCrossAttentionstuple(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=Trueconfig.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.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

引數

  • input_ids (torch.LongTensor,形狀為 (batch_size, input_ids_length)) — input_ids_length = sequence_length 如果 past_key_valuesNone,否則為 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=Trueconfig.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。

    什麼是 token 型別 ID?

  • position_ids (torch.Tensor,形狀為 (batch_size, sequence_length)可選) — 每個輸入序列 token 在位置嵌入中的位置索引。選擇範圍為 [0, config.n_positions - 1]

    什麼是位置 ID?

  • 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.SequenceClassifierOutputWithPasttuple(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
< > 在 GitHub 上更新

© . This site is unofficial and not affiliated with Hugging Face, Inc.