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 上更新