Transformers 文档

ImageGPT

Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

ImageGPT

概述

ImageGPT 模型在 Generative Pretraining from Pixels 中被 Mark Chen、Alec Radford、Rewon Child、Jeffrey Wu、Heewoo Jun、David Luan、Ilya Sutskever 提出。ImageGPT (iGPT) 是一个类似 GPT-2 的模型,经过训练可以预测下一个像素值,从而实现无条件和有条件的图像生成。

该论文的摘要如下

受到自然语言无监督表征学习进展的启发,我们研究了类似的模型是否可以学习图像的有用表征。我们训练了一个序列 Transformer 来自回归地预测像素,而没有结合 2D 输入结构的知识。尽管在没有标签的低分辨率 ImageNet 上进行训练,但我们发现 GPT-2 规模的模型学习到了强大的图像表征,这通过线性探测、微调和低数据分类来衡量。在 CIFAR-10 上,我们通过线性探测实现了 96.3% 的准确率,优于有监督的 Wide ResNet,并通过完全微调实现了 99.0% 的准确率,与顶级的有监督预训练模型相匹配。当用 VQVAE 编码替换像素时,我们在 ImageNet 上的自监督基准测试中也具有竞争力,在我们的特征的线性探测中实现了 69.0% 的 top-1 准确率。

图纸 方法总结。摘自 原始论文

此模型由 nielsr 贡献,基于 此 issue。 原始代码可以在 这里 找到。

使用技巧

  • ImageGPT 几乎与 GPT-2 完全相同,唯一的区别是使用了不同的激活函数(即 “quick gelu”),并且层归一化层不对输入进行中心化处理。ImageGPT 也没有绑定输入和输出嵌入。
  • 由于 Transformer 的注意力机制的时间和内存需求与序列长度成二次方比例增长,因此作者在较小的输入分辨率(如 32x32 和 64x64)上预训练了 ImageGPT。然而,将来自 0..255 的 32x32x3=3072 个 tokens 的序列输入到 Transformer 中仍然非常庞大。因此,作者对 (R,G,B) 像素值应用了 k 均值聚类,k=512。这样,我们只有一个 32*32 = 1024 长度的序列,但现在是范围为 0..511 的整数。因此,我们以更大的嵌入矩阵为代价缩小了序列长度。换句话说,ImageGPT 的词汇量大小为 512,外加 1 个特殊的 “句子开始” (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 可以表示的不同 tokens 的数量。
  • 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) — 用于初始化所有权重矩阵的 truncated_normal_initializer 的标准差。
  • scale_attn_weights (bool, 可选, 默认为 True) — 通过除以 sqrt(hidden_size) 缩放注意力权重。
  • use_cache (bool, 可选, 默认为 True) — 模型是否应返回最后的键/值注意力(并非所有模型都使用)。
  • 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: Union = None do_resize: bool = True size: Dict = 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: Union do_resize: bool = None size: Dict = None resample: Resampling = None do_normalize: bool = None do_color_quantize: Optional = None clusters: Union = None return_tensors: Union = None data_format: Union = <ChannelDimension.FIRST: 'channels_first'> input_data_format: Union = 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, 可选) — 要返回的张量类型。可以是以下之一:
    • Unset: 返回 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 模型 Transformer 输出原始隐藏状态,顶部没有任何特定的头部。

此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以了解与常规用法和行为相关的所有事项。

forward

< >

( input_ids: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None **kwargs: Any ) transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentionstuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — input_ids_length = sequence_length 如果 past_key_valuesNone,否则为 past_key_values[0][0].shape[-2] (输入过去键值状态的 sequence_length)。词汇表中输入序列 tokens 的索引。

    如果使用 past_key_values,则只有尚未计算过去的 input_ids 应作为 input_ids 传递。

    索引可以使用 AutoImageProcessor 获取。 有关详细信息,请参阅 ImageGPTImageProcessor.call()

  • past_key_values (长度为 config.n_layersTuple[Tuple[torch.Tensor]]) — 包含模型计算的预计算隐藏状态(注意力模块中的键和值)(请参阅下面的 past_key_values 输出)。 可用于加速顺序解码。 已将其过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算。
  • attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选) — 用于避免对 padding token 索引执行 attention 的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 未被 masked 的 tokens,
    • 0 表示 被 masked 的 tokens。

    什么是 attention masks?

  • token_type_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 分段 token 索引,用于指示输入的第一个和第二个部分。 索引在 [0, 1] 中选择:

    • 0 对应于 sentence A token,
    • 1 对应于 sentence B token。

    什么是 token type IDs?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 位置嵌入中每个输入序列 token 的位置索引。 在范围 [0, config.max_position_embeddings - 1] 中选择。

    什么是 position IDs?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于使 self-attention 模块的选定 head 无效的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 head 未被 masked
    • 0 表示 head 被 masked
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — 可选地,您可以选择直接传递嵌入表示,而不是传递 input_ids。 如果您想要比模型的内部嵌入查找矩阵更精细地控制如何将 input_ids 索引转换为关联的向量,这将非常有用。

    如果使用 past_key_values,则可以选择仅输入最后一个 inputs_embeds(请参阅 past_key_values)。

  • use_cache (bool可选) — 如果设置为 True,则返回 past_key_values 键值状态,并且可以用于加速解码(请参阅 past_key_values)。
  • output_attentions (bool可选) — 是否返回所有 attention 层的 attention tensors。 有关更多详细信息,请参阅返回 tensors 下的 attentions
  • output_hidden_states (bool可选) — 是否返回所有层的 hidden states。 有关更多详细信息,请参阅返回 tensors 下的 hidden_states
  • return_dict (bool可选) — 是否返回 ModelOutput 而不是普通元组。
  • labels (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于语言建模的 Labels。 请注意,labels 在模型内部是 shifted 的,即您可以设置 labels = input_ids。 索引在 [-100, 0, ..., config.vocab_size] 中选择。 所有设置为 -100 的 labels 都将被忽略(masked),损失仅针对 [0, ..., config.vocab_size] 中的 labels 计算。

返回

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)) — 模型最后一层的输出端的 hidden-states 序列。

    如果使用 past_key_values,则仅输出形状为 (batch_size, 1, hidden_size) 的序列的最后一个 hidden-state。

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstuple(tuple(torch.FloatTensor)) 元组,其中每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的 tensors,并且可选地,如果 config.is_encoder_decoder=True,则具有 2 个形状为 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head) 的额外 tensors。

    包含预先计算的 hidden-states(self-attention 模块中的键和值,以及可选地,如果 config.is_encoder_decoder=True,则在 cross-attention 模块中),这些 hidden-states 可以用于(请参阅 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)

    模型在每一层输出端的 hidden-states,加上可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    attention softmax 之后的 Attentions 权重,用于计算 self-attention heads 中的加权平均值。

  • 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)

    decoder 的 cross-attention 层的 Attentions 权重,在 attention softmax 之后,用于计算 cross-attention heads 中的加权平均值。

The ImageGPTModel forward 方法,覆盖了 __call__ 特殊方法。

虽然 forward pass 的配方需要在该函数内定义,但之后应该调用 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,顶部带有语言建模 head(线性层,其权重与输入嵌入相关联)。

此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以了解与常规用法和行为相关的所有事项。

forward

< >

( input_ids: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None encoder_hidden_states: Optional = None encoder_attention_mask: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None **kwargs: Any ) transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — input_ids_length = sequence_length 如果 past_key_valuesNone,否则为 past_key_values[0][0].shape[-2] (输入过去键值状态的 sequence_length)。词汇表中输入序列 tokens 的索引。

    如果使用 past_key_values,则只有尚未计算过去的 input_ids 应作为 input_ids 传递。

    索引可以使用 AutoImageProcessor 获取。 有关详细信息,请参阅 ImageGPTImageProcessor.call()

  • past_key_values (长度为 config.n_layersTuple[Tuple[torch.Tensor]]) — 包含模型计算的预计算隐藏状态(注意力模块中的键和值)(请参阅下面的 past_key_values 输出)。 可用于加速顺序解码。 已将其过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算。
  • attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选) — 用于避免对 padding token 索引执行 attention 的 Mask。 Mask 值在 [0, 1] 中选择:

    • 1 表示 未被 masked 的 tokens,
    • 0 表示 被 masked 的 tokens。

    什么是 attention masks?

  • token_type_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 分段 token 索引,用于指示输入的第一个和第二个部分。 索引在 [0, 1] 中选择:

    • 0 对应于 sentence A token,
    • 1 对应于 sentence B token。

    什么是 token type IDs?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列 token 在位置嵌入中的位置索引。在范围 [0, config.max_position_embeddings - 1] 中选择。

    什么是位置 IDs?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置空自注意力模块中选定 head 的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示 head 未被掩蔽
    • 0 表示 head 被掩蔽
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — (可选)您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您希望比模型的内部嵌入查找矩阵更灵活地控制如何将 input_ids 索引转换为关联向量,这将非常有用。

    如果使用了 past_key_values,则可以选择仅输入最后的 inputs_embeds(请参阅 past_key_values)。

  • 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 (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 用于语言建模的标签。请注意,标签在模型内部被移动,即您可以设置 labels = input_ids。索引在 [-100, 0, ..., config.vocab_size] 中选择。所有设置为 -100 的标签都将被忽略(掩蔽),损失仅针对 [0, ..., config.vocab_size] 中的标签计算

返回

transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstuple(torch.FloatTensor)

一个 transformers.modeling_outputs.CausalLMOutputWithCrossAttentionstorch.FloatTensor 的元组(如果传递 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (ImageGPTConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 语言建模损失(用于下一个 token 预测)。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模 head 的预测分数(SoftMax 之前每个词汇 token 的分数)。

  • hidden_states (tuple(torch.FloatTensor)可选,当传递 output_hidden_states=True 或当 config.output_hidden_states=True 时返回) — torch.FloatTensor 元组(如果模型具有嵌入层,则一个用于嵌入的输出;+ 每个层的输出一个),形状为 (batch_size, sequence_length, hidden_size)

    模型在每一层输出端的 hidden-states,加上可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    attention softmax 之后的 Attentions 权重,用于计算 self-attention heads 中的加权平均值。

  • cross_attentions (tuple(torch.FloatTensor)可选,当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 的元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    注意力 softmax 之后的交叉注意力权重,用于计算交叉注意力 head 中的加权平均值。

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — torch.FloatTensor 元组的元组,长度为 config.n_layers,每个元组包含自注意力层的缓存键、值状态,以及交叉注意力层(如果模型用于编码器-解码器设置)。仅当 config.is_decoder = True 时相关。

    包含预先计算的隐藏状态(注意力块中的键和值),可用于(请参阅 past_key_values 输入)加速顺序解码。

ImageGPTForCausalImageModeling forward 方法覆盖了 __call__ 特殊方法。

虽然 forward pass 的配方需要在该函数内定义,但之后应该调用 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:].cpu().detach().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() 方法以加载模型权重。

带有图像分类 head(线性层)的 ImageGPT 模型 transformer。ImageGPTForImageClassification 平均池化隐藏状态以进行分类。

此模型继承自 PreTrainedModel。查看超类文档,了解库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝头部等)。

此模型也是 PyTorch torch.nn.Module 子类。将其用作常规 PyTorch 模块,并参阅 PyTorch 文档以了解与常规用法和行为相关的所有事项。

forward

< >

( input_ids: Optional = None past_key_values: Optional = None attention_mask: Optional = None token_type_ids: Optional = None position_ids: Optional = None head_mask: Optional = None inputs_embeds: Optional = None labels: Optional = None use_cache: Optional = None output_attentions: Optional = None output_hidden_states: Optional = None return_dict: Optional = None **kwargs: Any ) transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

参数

  • input_ids (torch.LongTensor,形状为 (batch_size, sequence_length)) — 如果 past_key_valuesNone,则 input_ids_length = sequence_length,否则 input_ids_length = 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]],长度为 config.n_layers) — 包含模型计算的预计算隐藏状态(注意力块中的键和值)(请参阅下面的 past_key_values 输出)。可用于加速顺序解码。已将其过去状态提供给此模型的 input_ids 不应作为 input_ids 传递,因为它们已被计算出来。
  • attention_mask (torch.FloatTensor,形状为 (batch_size, sequence_length)可选) — 用于避免在 padding token 索引上执行注意力的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示 token 未被掩蔽
    • 0 表示 token 被掩蔽

    什么是注意力掩码?

  • token_type_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 分段 token 索引,用于指示输入的第一个和第二个部分。索引在 [0, 1] 中选择:

    • 0 对应于 句子 A token,
    • 1 对应于 句子 B token。

    什么是 token 类型 IDs?

  • position_ids (torch.LongTensor,形状为 (batch_size, sequence_length)可选) — 每个输入序列 token 在位置嵌入中的位置索引。在范围 [0, config.max_position_embeddings - 1] 中选择。

    什么是位置 IDs?

  • head_mask (torch.FloatTensor,形状为 (num_heads,)(num_layers, num_heads)可选) — 用于置空自注意力模块中选定 head 的掩码。掩码值在 [0, 1] 中选择:

    • 1 表示 head 未被掩蔽
    • 0 表示 head 被掩蔽
  • inputs_embeds (torch.FloatTensor,形状为 (batch_size, sequence_length, hidden_size)可选) — (可选)您可以选择直接传递嵌入表示,而不是传递 input_ids。如果您希望比模型的内部嵌入查找矩阵更灵活地控制如何将 input_ids 索引转换为关联向量,这将非常有用。

    如果使用了 past_key_values,则可以选择仅输入最后的 inputs_embeds(请参阅 past_key_values)。

  • 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 (torch.LongTensor,形状为 (batch_size,)可选) — 用于计算序列分类/回归损失的标签。索引应在 [0, ..., config.num_labels - 1] 中。如果 config.num_labels == 1,则计算回归损失(均方误差损失);如果 config.num_labels > 1,则计算分类损失(交叉熵损失)。

返回

transformers.modeling_outputs.SequenceClassifierOutputWithPasttuple(torch.FloatTensor)

一个 transformers.modeling_outputs.SequenceClassifierOutputWithPast 或一个 torch.FloatTensor 的元组(如果传递了 return_dict=False 或当 config.return_dict=False 时),包含各种元素,具体取决于配置 (ImageGPTConfig) 和输入。

  • loss (torch.FloatTensor,形状为 (1,)可选,当提供 labels 时返回) — 分类(或回归,如果 config.num_labels==1)损失。

  • logits (torch.FloatTensor,形状为 (batch_size, config.num_labels)) — 分类(或回归,如果 config.num_labels==1)得分(在 SoftMax 之前)。

  • past_key_values (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstuple(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)

    模型在每一层输出端的 hidden-states,加上可选的初始嵌入输出。

  • attentions (tuple(torch.FloatTensor)可选,当传递 output_attentions=True 或当 config.output_attentions=True 时返回) — torch.FloatTensor 元组(每层一个),形状为 (batch_size, num_heads, sequence_length, sequence_length)

    attention softmax 之后的 Attentions 权重,用于计算 self-attention heads 中的加权平均值。

ImageGPTForImageClassification 的 forward 方法覆盖了 __call__ 特殊方法。

虽然 forward pass 的配方需要在该函数内定义,但之后应该调用 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 上更新