Transformers 文档

ImageGPT

Hugging Face's logo
加入 Hugging Face 社区

并获取增强的文档体验

开始使用

ImageGPT

PyTorch

概述

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 准确率。

drawing 方法总结。摘自[原始论文](https://cdn.openai.com/papers/Generative_Pretraining_from_Pixels_V2.pdf)。

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

使用技巧

  • ImageGPT 几乎与 GPT-2 完全相同,唯一的例外是使用了不同的激活函数(即“quick gelu”),并且层归一化层不对输入进行均值中心化。ImageGPT 也没有绑定输入和输出嵌入。
  • 由于 Transformer 的注意力机制的时间和内存需求与序列长度成二次方比例增长,因此作者在较小的输入分辨率(例如 32x32 和 64x64)上预训练了 ImageGPT。然而,将来自 0..255 的 32x32x3=3072 个 token 序列馈送到 Transformer 仍然非常庞大。因此,作者对 k=512 的 (R,G,B) 像素值应用了 k-means 聚类。这样,我们只有 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 来表示的不同 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) — 用于初始化所有权重矩阵的 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: typing.Union[typing.List[typing.List[int]], numpy.ndarray, NoneType] = None do_resize: bool = True size: typing.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),对其进行归一化处理,最后进行颜色量化,以获得“像素值”(颜色簇)序列。

预处理

< >

( images: typing.Union[ForwardRef('PIL.Image.Image'), numpy.ndarray, ForwardRef('torch.Tensor'), list['PIL.Image.Image'], list[numpy.ndarray], list['torch.Tensor']] do_resize: bool = None size: typing.Dict[str, int] = None resample: Resampling = None do_normalize: bool = None do_color_quantize: typing.Optional[bool] = None clusters: typing.Union[typing.List[typing.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, 可选) — 要返回的张量类型。 可以是以下之一:
    • 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,输出原始隐藏状态,顶部没有任何特定的 head。

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[typing.Tuple[typing.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, sequence_length)) — 如果 past_key_valuesNone,则 input_ids_length = sequence_length,否则为 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 索引上执行注意力的掩码。 掩码值在 [0, 1] 中选择:

    • 1 表示 未被掩盖 的 tokens,
    • 0 表示 被掩盖 的 tokens。

    什么是注意力掩码?

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

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

    什么是 token 类型 ID?

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

    什么是位置 ID?

  • 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.BaseModelOutputWithPastAndCrossAttentionstuple(torch.FloatTensor)

transformers.modeling_outputs.BaseModelOutputWithPastAndCrossAttentionstorch.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 (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstuple(torch.FloatTensor) 元组,每个元组包含 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head)) 的张量,并且如果 config.is_encoder_decoder=True,则可选地包含 2 个形状为 (batch_size, num_heads, encoder_sequence_length, embed_size_per_head) 的附加张量。

    包含预先计算的隐藏状态(自注意力块中的键和值,以及可选地,如果 config.is_encoder_decoder=True,则在交叉注意力块中),这些状态可用于(请参阅 past_key_values 输入)加速顺序解码。

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

    模型在每一层输出端的隐藏状态,以及可选的初始嵌入输出。

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

    注意力 softmax 之后的注意力权重,用于计算自注意力头部的加权平均值。

  • 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__ 特殊方法。

尽管 forward 传递的配方需要在该函数中定义,但应该在之后调用 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。 查看超类文档以获取库为其所有模型实现的通用方法(例如下载或保存、调整输入嵌入大小、剪枝 head 等)。

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

forward

< >

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

    • 1 表示标记未被掩码
    • 0 表示标记被掩码

    什么是注意力掩码?

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

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

    什么是标记类型 ID?

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

    什么是位置 ID?

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

    • 1 表示头部未被掩码
    • 0 表示头部被掩码
  • 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 时返回) — 语言建模损失(用于下一个标记预测)。

  • logits (torch.FloatTensor,形状为 (batch_size, sequence_length, config.vocab_size)) — 语言建模头的预测分数(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 (tuple(tuple(torch.FloatTensor))可选,当传递 use_cache=True 或当 config.use_cache=True 时返回) — 长度为 config.n_layerstorch.FloatTensor 元组的元组,每个元组包含自注意力层的缓存键、值状态,以及交叉注意力层(如果模型用于编码器-解码器设置)。 仅在 config.is_decoder = True 时相关。

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

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

尽管 forward 传递的配方需要在该函数中定义,但应该在之后调用 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() 方法来加载模型权重。

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

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

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

forward

< >

( input_ids: typing.Optional[torch.Tensor] = None past_key_values: typing.Optional[typing.Tuple[typing.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 or tuple(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)。词汇表中输入序列 tokens 的索引。

    如果使用 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)可选) — 用于避免在填充 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 类型 ID?

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

    什么是位置 ID?

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

    • 1 表示头 未被掩盖
    • 0 表示头 被掩盖
  • 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.SequenceClassifierOutputWithPasttorch.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 时返回) — tuple(tuple(torch.FloatTensor)) 元组,长度为 config.n_layers,每个元组具有 2 个形状为 (batch_size, num_heads, sequence_length, embed_size_per_head) 的张量)

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

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

    模型在每一层输出端的隐藏状态,以及可选的初始嵌入输出。

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

    注意力 softmax 之后的注意力权重,用于计算自注意力头部的加权平均值。

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

尽管 forward 传递的配方需要在该函数中定义,但应该在之后调用 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
< > Update on GitHub