Transformers 文件

Informer 模型

Hugging Face's logo
加入 Hugging Face 社群

並獲得增強的文件體驗

開始使用

Informer 模型

PyTorch

概述

Informer 模型由 Haoyi Zhou、Shanghang Zhang、Jieqi Peng、Shuai Zhang、Jianxin Li、Hui Xiong 和 Wancai Zhang 在 Informer: 超越高效 Transformer 的長序列時間序列預測 中提出。

該方法引入了一種機率注意力機制,以選擇“活躍”查詢而不是“惰性”查詢,並提供了一個稀疏的 Transformer,從而減輕了普通注意力機制的二次計算和記憶體需求。

論文摘要如下:

許多實際應用需要預測長序列時間序列,例如電力消耗規劃。長序列時間序列預測 (LSTF) 要求模型具有高預測能力,即有效捕捉輸出和輸入之間精確的長距離依賴耦合的能力。最近的研究表明,Transformer 有潛力提高預測能力。然而,Transformer 存在一些嚴重問題,使其無法直接應用於 LSTF,包括二次時間複雜度、高記憶體使用量以及編碼器-解碼器架構的固有侷限性。為了解決這些問題,我們設計了一個高效的基於 Transformer 的 LSTF 模型,名為 Informer,它具有三個獨特的特性:(i) ProbSparse 自注意力機制,實現了 O(L logL) 的時間複雜度和記憶體使用,並且在序列依賴對齊方面具有可比的效能。(ii) 自注意力蒸餾透過將級聯層輸入減半來突出主導注意力,並有效處理超長輸入序列。(iii) 生成式解碼器,概念上很簡單,它透過一次正向操作而不是逐步預測長序列時間序列,這大大提高了長序列預測的推理速度。在四個大規模資料集上進行的大量實驗表明,Informer 顯著優於現有方法,併為 LSTF 問題提供了新的解決方案。

該模型由 elisimkashif 貢獻。原始程式碼可在 此處 找到。

資源

官方 Hugging Face 和社群 (🌎 表示) 資源列表,可幫助您入門。如果您有興趣提交資源以包含在此處,請隨時開啟拉取請求,我們將對其進行稽核!理想情況下,資源應展示新內容,而不是重複現有資源。

InformerConfig

class transformers.InformerConfig

< >

( prediction_length: typing.Optional[int] = None context_length: typing.Optional[int] = None distribution_output: str = 'student_t' loss: str = 'nll' input_size: int = 1 lags_sequence: typing.Optional[list[int]] = None scaling: typing.Union[str, bool, NoneType] = 'mean' num_dynamic_real_features: int = 0 num_static_real_features: int = 0 num_static_categorical_features: int = 0 num_time_features: int = 0 cardinality: typing.Optional[list[int]] = None embedding_dimension: typing.Optional[list[int]] = None d_model: int = 64 encoder_ffn_dim: int = 32 decoder_ffn_dim: int = 32 encoder_attention_heads: int = 2 decoder_attention_heads: int = 2 encoder_layers: int = 2 decoder_layers: int = 2 is_encoder_decoder: bool = True activation_function: str = 'gelu' dropout: float = 0.05 encoder_layerdrop: float = 0.1 decoder_layerdrop: float = 0.1 attention_dropout: float = 0.1 activation_dropout: float = 0.1 num_parallel_samples: int = 100 init_std: float = 0.02 use_cache = True attention_type: str = 'prob' sampling_factor: int = 5 distil: bool = True **kwargs )

引數

  • prediction_length (int) — 解碼器的預測長度。換句話說,模型預測的時間範圍。這個值通常由資料集決定,我們建議進行適當設定。
  • context_length (int, 可選, 預設為 prediction_length) — 編碼器的上下文長度。如果為 None,上下文長度將與 prediction_length 相同。
  • distribution_output (string, 可選, 預設為 "student_t") — 模型的分發輸出頭。可以是“student_t”、“normal”或“negative_binomial”。
  • loss (string, 可選, 預設為 "nll") — 與 distribution_output 頭對應的模型損失函式。對於引數分佈,它是負對數似然 (nll) - 目前是唯一支援的。
  • input_size (int, 可選, 預設為 1) — 目標變數的大小,對於單變數目標,預設為 1。對於多變數目標,將大於 1。
  • scaling (stringbool, 可選, 預設為 "mean") — 是否透過“均值”縮放器、“標準差”縮放器或不使用縮放器(如果為 None)來縮放輸入目標。如果為 True,則縮放器設定為“均值”。
  • lags_sequence (list[int], 可選, 預設為 [1, 2, 3, 4, 5, 6, 7]) — 輸入時間序列的滯後項作為協變數,通常由資料頻率決定。預設為 [1, 2, 3, 4, 5, 6, 7],但我們建議根據資料集進行適當更改。
  • num_time_features (int, 可選, 預設為 0) — 輸入時間序列中的時間特徵數量。
  • num_dynamic_real_features (int, 可選, 預設為 0) — 動態實值特徵的數量。
  • num_static_categorical_features (int, 可選, 預設為 0) — 靜態分類特徵的數量。
  • num_static_real_features (int, 可選, 預設為 0) — 靜態實值特徵的數量。
  • cardinality (list[int], 可選) — 每個靜態分類特徵的基數(不同值的數量)。應為整數列表,其長度與 num_static_categorical_features 相同。如果 num_static_categorical_features 大於 0,則不能為 None
  • embedding_dimension (list[int], 可選) — 每個靜態分類特徵的嵌入維度。應為整數列表,其長度與 num_static_categorical_features 相同。如果 num_static_categorical_features 大於 0,則不能為 None
  • d_model (int, 可選, 預設為 64) — Transformer 層的維度。
  • encoder_layers (int, 可選, 預設為 2) — 編碼器層數。
  • decoder_layers (int, 可選, 預設為 2) — 解碼器層數。
  • encoder_attention_heads (int, 可選, 預設為 2) — Transformer 編碼器中每個注意力層的注意力頭數量。
  • decoder_attention_heads (int, 可選, 預設為 2) — Transformer 解碼器中每個注意力層的注意力頭數量。
  • encoder_ffn_dim (int, 可選, 預設為 32) — 編碼器中“中間”(通常稱為前饋)層的維度。
  • decoder_ffn_dim (int, 可選, 預設為 32) — 解碼器中“中間”(通常稱為前饋)層的維度。
  • activation_function (strfunction, 可選, 預設為 "gelu") — 編碼器和解碼器中的非線性啟用函式(函式或字串)。如果為字串,則支援 "gelu""relu"
  • dropout (float, 可選, 預設為 0.1) — 編碼器和解碼器中所有全連線層的 dropout 機率。
  • encoder_layerdrop (float, 可選, 預設為 0.1) — 每個編碼器層中注意力層和全連線層的 dropout 機率。
  • decoder_layerdrop (float, 可選, 預設為 0.1) — 每個解碼器層中注意力層和全連線層的 dropout 機率。
  • attention_dropout (float, 可選, 預設為 0.1) — 注意力機率的 dropout 機率。
  • activation_dropout (float, 可選, 預設為 0.1) — 前饋網路的兩個層之間使用的 dropout 機率。
  • num_parallel_samples (int, 可選, 預設為 100) — 推理的每個時間步並行生成的樣本數量。
  • init_std (float, 可選, 預設為 0.02) — 截斷正態權重初始化分佈的標準差。
  • use_cache (bool, 可選, 預設為 True) — 是否使用過去的鍵/值注意力(如果適用於模型)來加速解碼。
  • attention_type (str, 可選, 預設為“prob”) — 編碼器中使用的注意力型別。可以設定為“prob”(Informer 的 ProbAttention)或“full”(普通 Transformer 的標準自注意力)。
  • sampling_factor (int, 可選, 預設為 5) — ProbSparse 取樣因子(僅當 attention_type=“prob”時有效)。它用於控制縮減查詢矩陣 (Q_reduce) 的輸入長度。
  • distil (bool, 可選, 預設為 True) — 是否在編碼器中使用蒸餾。

這是用於儲存 InformerModel 配置的配置類。它用於根據指定的引數例項化 Informer 模型,定義模型架構。使用預設值例項化配置將生成類似於 Informer huggingface/informer-tourism-monthly 架構的配置。

配置物件繼承自 PretrainedConfig,可用於控制模型輸出。有關更多資訊,請閱讀 PretrainedConfig 的文件。

示例

>>> from transformers import InformerConfig, InformerModel

>>> # Initializing an Informer configuration with 12 time steps for prediction
>>> configuration = InformerConfig(prediction_length=12)

>>> # Randomly initializing a model (with random weights) from the configuration
>>> model = InformerModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config

InformerModel

class transformers.InformerModel

< >

( config: InformerConfig )

引數

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

裸 Informer 模型,輸出原始隱藏狀態,不帶任何特定頭。

該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。

該模型也是 PyTorch torch.nn.Module 子類。請將其用作常規 PyTorch 模組,並參考 PyTorch 文件中所有與通用用法和行為相關的內容。

前向傳播

< >

( past_values: Tensor past_time_features: Tensor past_observed_mask: Tensor static_categorical_features: typing.Optional[torch.Tensor] = None static_real_features: typing.Optional[torch.Tensor] = None future_values: typing.Optional[torch.Tensor] = None future_time_features: typing.Optional[torch.Tensor] = None decoder_attention_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None decoder_head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None encoder_outputs: typing.Optional[list[torch.FloatTensor]] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None output_hidden_states: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None use_cache: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None ) transformers.modeling_outputs.Seq2SeqTSModelOutputtuple(torch.FloatTensor)

引數

  • past_values (形狀為 (batch_size, sequence_length)(batch_size, sequence_length, input_size)torch.FloatTensor) — 時間序列的過去值,作為預測未來的上下文。此張量的序列大小必須大於模型的 context_length,因為模型將使用更大的大小來構建滯後特徵,即新增額外的過去值以作為“額外上下文”。

    這裡的 sequence_length 等於 config.context_length + max(config.lags_sequence),如果沒有配置 lags_sequence,則等於 config.context_length + 7(因為預設情況下,config.lags_sequence 中最大的回溯索引是 7)。_past_length 屬性返回過去的實際長度。

    past_values 是 Transformer 編碼器作為輸入獲取的內容(帶有可選的附加特徵,例如 static_categorical_featuresstatic_real_featurespast_time_features 和滯後項)。

    可選地,缺失值需要用零替換,並透過 past_observed_mask 指示。

    對於多元時間序列,需要 input_size > 1 維度,並且對應於每個時間步時間序列中的變數數量。

  • past_time_features (形狀為 (batch_size, sequence_length, num_features)torch.FloatTensor) — 所需的時間特徵,模型將在內部新增到 past_values 中。這些可以是“年份月份”、“月份日期”等編碼為向量(例如作為傅立葉特徵)的內容。這些也可以是所謂的“年齡”特徵,它們基本上幫助模型知道時間序列“處於生命中的哪個點”。年齡特徵對於遙遠的過去時間步具有較小的值,並且隨著我們接近當前時間步而單調增加。假日特徵也是時間特徵的一個很好的例子。

    這些特徵作為輸入的“位置編碼”。因此,與 BERT 等模型不同,BERT 等模型的位置編碼是從頭開始在模型內部學習的,而時間序列 Transformer 需要提供額外的時間特徵。時間序列 Transformer 只學習 static_categorical_features 的額外嵌入。

    額外的動態實值協變數可以連線到此張量,但需要注意的是,這些特徵必須在預測時已知。

    這裡的 num_features 等於 config.num_time_features+config.num_dynamic_real_features`。

  • past_observed_mask (torch.BoolTensor,形狀為 (batch_size, sequence_length)(batch_size, sequence_length, input_size)可選) — 布林掩碼,用於指示哪些 past_values 是觀測到的,哪些是缺失的。掩碼值選自 [0, 1]

    • 1 表示值是觀測到的
    • 0 表示值是缺失的(即被零替換的 NaN)。
  • static_categorical_features (torch.LongTensor,形狀為 (batch_size, 靜態分類特徵的數量)可選) — 可選的靜態分類特徵,模型將為其學習嵌入,並將其新增到時間序列的值中。

    靜態分類特徵是指在所有時間步長都具有相同值的特徵(隨時間靜態)。

    靜態分類特徵的一個典型示例是時間序列 ID。

  • static_real_features (torch.FloatTensor,形狀為 (batch_size, 靜態實數特徵的數量)可選) — 可選的靜態實數特徵,模型將將其新增到時間序列的值中。

    靜態實數特徵是指在所有時間步長都具有相同值的特徵(隨時間靜態)。

    靜態實數特徵的一個典型示例是促銷資訊。

  • future_values (torch.FloatTensor,形狀為 (batch_size, prediction_length)(batch_size, prediction_length, input_size)可選) — 時間序列的未來值,用作模型的標籤。future_values 是 Transformer 在訓練時需要學習輸出的內容,給定 past_values

    這裡的序列長度等於 prediction_length

    有關詳細資訊,請參閱演示筆記本和程式碼片段。

    可選地,在訓練期間,任何缺失值都需要用零替換,並透過 future_observed_mask 指示。

    對於多元時間序列,需要 input_size > 1 維度,並且對應於每個時間步長中時間序列的變數數量。

  • future_time_features (torch.FloatTensor,形狀為 (batch_size, prediction_length, num_features)) — 預測視窗所需的時序特徵,模型將在內部將其新增到 future_values 中。這些特徵可以是“一年中的月份”、“月中的日期”等編碼為向量(例如傅立葉特徵)。這些也可以是所謂的“年齡”特徵,它們基本上幫助模型瞭解時間序列處於“生命中的哪個點”。年齡特徵對於遙遠的過去時間步長具有較小的值,並且隨著我們接近當前時間步長而單調增加。假日特徵也是時序特徵的一個很好的例子。

    這些特徵充當輸入的“位置編碼”。因此,與 BERT 等模型不同,BERT 模型中的位置編碼是在模型內部從頭學習的引數,而時序 Transformer 需要提供額外的時序特徵。時序 Transformer 只學習 static_categorical_features 的額外嵌入。

    額外的動態實數協變數可以與此張量連線,但需要注意的是,這些特徵必須在預測時已知。

    這裡的 num_features 等於 config.num_time_features+config.num_dynamic_real_features`。

  • decoder_attention_mask (torch.LongTensor,形狀為 (batch_size, target_sequence_length)可選) — 用於避免對特定標記索引執行注意力的掩碼。預設情況下,將使用因果掩碼,以確保模型只能檢視先前的輸入以預測未來。
  • head_mask (torch.Tensor,形狀為 (num_heads,)(num_layers, num_heads)可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭部未被遮蔽
    • 0 表示頭部被遮蔽
  • decoder_head_mask (torch.Tensor,形狀為 (decoder_layers, decoder_attention_heads)可選) — 用於使解碼器中注意力模組的選定頭部無效的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭部未被遮蔽
    • 0 表示頭部被遮蔽
  • cross_attn_head_mask (torch.Tensor,形狀為 (decoder_layers, decoder_attention_heads)可選) — 用於使交叉注意力模組的選定頭部無效的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭部未被遮蔽
    • 0 表示頭部被遮蔽
  • encoder_outputs (tuple(tuple(torch.FloatTensor)可選) — 元組包含 last_hidden_statehidden_states (可選) 和 attentions (可選) last_hidden_state,形狀為 (batch_size, sequence_length, hidden_size) (可選),是編碼器最後一層輸出的隱藏狀態序列。在解碼器的交叉注意力中使用。
  • past_key_values (list[torch.FloatTensor]可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前一階段返回的 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

  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。更多詳情請參閱返回張量下的 hidden_states
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。更多詳情請參閱返回張量下的 attentions
  • use_cache (bool可選) — 如果設定為 True,則返回 past_key_values 鍵值狀態,可用於加速解碼(參見 past_key_values)。
  • return_dict (bool可選) — 是否返回 ModelOutput 而不是普通元組。
  • cache_position (torch.LongTensor,形狀為 (sequence_length)可選) — 指示輸入序列標記在序列中位置的索引。與 position_ids 相反,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。

返回

transformers.modeling_outputs.Seq2SeqTSModelOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.Seq2SeqTSModelOutput 或一個 torch.FloatTensor 元組(如果傳入 return_dict=Falseconfig.return_dict=False),根據配置 (InformerConfig) 和輸入包含各種元素。

  • last_hidden_state (torch.FloatTensor,形狀為 (batch_size, sequence_length, hidden_size)) — 模型解碼器最後一層輸出的隱藏狀態序列。

    如果使用了 past_key_values,則只輸出形狀為 (batch_size, 1, hidden_size) 的序列的最後一個隱藏狀態。

  • past_key_values (EncoderDecoderCache可選,當傳入 use_cache=Trueconfig.use_cache=True 時返回) — 這是一個 EncoderDecoderCache 例項。更多詳情請參見我們的 kv 快取指南

    包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見 past_key_values 輸入)加速順序解碼。

  • decoder_hidden_states (tuple(torch.FloatTensor)可選,當傳入 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(如果模型有嵌入層,則一個用於嵌入輸出,加上一個用於每個層的輸出),形狀為 (batch_size, sequence_length, hidden_size)

    解碼器在每個層輸出的隱藏狀態,加上可選的初始嵌入輸出。

  • decoder_attentions (tuple(torch.FloatTensor)可選,當傳入 output_attentions=Trueconfig.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 之後,用於計算交叉注意力頭中的加權平均。

  • encoder_last_hidden_state (torch.FloatTensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 模型編碼器最後一層輸出的隱藏狀態序列。

  • encoder_hidden_states (tuple(torch.FloatTensor)可選,當傳入 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(如果模型有嵌入層,則一個用於嵌入輸出,加上一個用於每個層的輸出),形狀為 (batch_size, sequence_length, hidden_size)

    編碼器在每個層輸出的隱藏狀態,加上可選的初始嵌入輸出。

  • encoder_attentions (tuple(torch.FloatTensor)可選,當傳入 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組(每個層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。

  • loc (torch.FloatTensor,形狀為 (batch_size,)(batch_size, input_size)可選) — 每個時間序列上下文視窗的偏移值,用於使模型輸入具有相同量級,然後用於移回原始量級。

  • scale (torch.FloatTensor,形狀為 (batch_size,)(batch_size, input_size)可選) — 每個時間序列上下文視窗的縮放值,用於使模型輸入具有相同量級,然後用於縮放回原始量級。

  • static_features (torch.FloatTensor,形狀為 (batch_size, feature size)可選) — 批次中每個時間序列的靜態特徵,在推理時複製到協變數。

InformerModel 的前向傳播方法,覆蓋了 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式中定義,但在此之後應呼叫 Module 例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> from huggingface_hub import hf_hub_download
>>> import torch
>>> from transformers import InformerModel

>>> file = hf_hub_download(
...     repo_id="hf-internal-testing/tourism-monthly-batch", filename="train-batch.pt", repo_type="dataset"
... )
>>> batch = torch.load(file)

>>> model = InformerModel.from_pretrained("huggingface/informer-tourism-monthly")

>>> # during training, one provides both past and future values
>>> # as well as possible additional features
>>> outputs = model(
...     past_values=batch["past_values"],
...     past_time_features=batch["past_time_features"],
...     past_observed_mask=batch["past_observed_mask"],
...     static_categorical_features=batch["static_categorical_features"],
...     static_real_features=batch["static_real_features"],
...     future_values=batch["future_values"],
...     future_time_features=batch["future_time_features"],
... )

>>> last_hidden_state = outputs.last_hidden_state

InformerForPrediction

class transformers.InformerForPrediction

< >

( config: InformerConfig )

引數

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

具有預測分佈頭部的 Informer 模型,用於時間序列預測。

該模型繼承自 PreTrainedModel。請檢視超類文件,瞭解庫為所有模型實現的通用方法(例如下載或儲存、調整輸入嵌入大小、修剪頭等)。

該模型也是 PyTorch torch.nn.Module 子類。請將其用作常規 PyTorch 模組,並參考 PyTorch 文件中所有與通用用法和行為相關的內容。

前向傳播

< >

( past_values: Tensor past_time_features: Tensor past_observed_mask: Tensor static_categorical_features: typing.Optional[torch.Tensor] = None static_real_features: typing.Optional[torch.Tensor] = None future_values: typing.Optional[torch.Tensor] = None future_time_features: typing.Optional[torch.Tensor] = None future_observed_mask: typing.Optional[torch.Tensor] = None decoder_attention_mask: typing.Optional[torch.LongTensor] = None head_mask: typing.Optional[torch.Tensor] = None decoder_head_mask: typing.Optional[torch.Tensor] = None cross_attn_head_mask: typing.Optional[torch.Tensor] = None encoder_outputs: typing.Optional[list[torch.FloatTensor]] = None past_key_values: typing.Optional[list[torch.FloatTensor]] = None output_hidden_states: typing.Optional[bool] = None output_attentions: typing.Optional[bool] = None use_cache: typing.Optional[bool] = None return_dict: typing.Optional[bool] = None cache_position: typing.Optional[torch.LongTensor] = None ) transformers.modeling_outputs.Seq2SeqTSModelOutputtuple(torch.FloatTensor)

引數

  • past_values (torch.FloatTensor,形狀為 (batch_size, sequence_length)(batch_size, sequence_length, input_size)) — 時間序列的過去值,用作預測未來的上下文。此張量的序列大小必須大於模型的 context_length,因為模型將使用更大的大小來構建滯後特徵,即從過去新增的額外值,用作“額外上下文”。

    這裡的 sequence_length 等於 config.context_length + max(config.lags_sequence),如果沒有配置 lags_sequence,則等於 config.context_length + 7(因為預設情況下,config.lags_sequence 中最大的回溯索引是 7)。屬性 _past_length 返回過去的實際長度。

    past_values 是 Transformer 編碼器獲得的輸入(可選包含附加特徵,例如 static_categorical_featuresstatic_real_featurespast_time_features 和滯後)。

    可選地,缺失值需要用零替換,並透過 past_observed_mask 指示。

    對於多元時間序列,需要 input_size > 1 維度,並且對應於每個時間步長中時間序列的變數數量。

  • past_time_features (torch.FloatTensor,形狀為 (batch_size, sequence_length, num_features)) — 所需的時序特徵,模型將在內部將其新增到 past_values 中。這些特徵可以是“一年中的月份”、“月中的日期”等編碼為向量(例如傅立葉特徵)。這些也可以是所謂的“年齡”特徵,它們基本上幫助模型瞭解時間序列處於“生命中的哪個點”。年齡特徵對於遙遠的過去時間步長具有較小的值,並且隨著我們接近當前時間步長而單調增加。假日特徵也是時序特徵的一個很好的例子。

    這些特徵充當輸入的“位置編碼”。因此,與 BERT 等模型不同,BERT 模型中的位置編碼是在模型內部從頭學習的引數,而時序 Transformer 需要提供額外的時序特徵。時序 Transformer 只學習 static_categorical_features 的額外嵌入。

    額外的動態實數協變數可以與此張量連線,但需要注意的是,這些特徵必須在預測時已知。

    這裡的 num_features 等於 config.num_time_features+config.num_dynamic_real_features`。

  • past_observed_mask (torch.BoolTensor,形狀為 (batch_size, sequence_length)(batch_size, sequence_length, input_size)可選) — 布林掩碼,用於指示哪些 past_values 是觀測到的,哪些是缺失的。掩碼值選自 [0, 1]

    • 1 表示值是觀測到的
    • 0 表示值是缺失的(即被零替換的 NaN)。
  • static_categorical_features (torch.LongTensor,形狀為 (batch_size, 靜態分類特徵的數量)可選) — 可選的靜態分類特徵,模型將為其學習嵌入,並將其新增到時間序列的值中。

    靜態分類特徵是指在所有時間步長都具有相同值的特徵(隨時間靜態)。

    靜態分類特徵的一個典型示例是時間序列 ID。

  • static_real_features (torch.FloatTensor,形狀為 (batch_size, 靜態實數特徵的數量)可選) — 可選的靜態實數特徵,模型將將其新增到時間序列的值中。

    靜態實數特徵是指在所有時間步長都具有相同值的特徵(隨時間靜態)。

    靜態實數特徵的一個典型示例是促銷資訊。

  • future_values (torch.FloatTensor,形狀為 (batch_size, prediction_length)(batch_size, prediction_length, input_size)可選) — 時間序列的未來值,用作模型的標籤。future_values 是 Transformer 在訓練時需要學習輸出的內容,給定 past_values

    這裡的序列長度等於 prediction_length

    有關詳細資訊,請參閱演示筆記本和程式碼片段。

    可選地,在訓練期間,任何缺失值都需要用零替換,並透過 future_observed_mask 指示。

    對於多元時間序列,需要 input_size > 1 維度,並且對應於每個時間步長中時間序列的變數數量。

  • future_time_features (torch.FloatTensor,形狀為 (batch_size, prediction_length, num_features)) — 預測視窗所需的時序特徵,模型將在內部將其新增到 future_values 中。這些特徵可以是“一年中的月份”、“月中的日期”等編碼為向量(例如傅立葉特徵)。這些也可以是所謂的“年齡”特徵,它們基本上幫助模型瞭解時間序列處於“生命中的哪個點”。年齡特徵對於遙遠的過去時間步長具有較小的值,並且隨著我們接近當前時間步長而單調增加。假日特徵也是時序特徵的一個很好的例子。

    這些特徵充當輸入的“位置編碼”。因此,與 BERT 等模型不同,BERT 模型中的位置編碼是在模型內部從頭學習的引數,而時序 Transformer 需要提供額外的時序特徵。時序 Transformer 只學習 static_categorical_features 的額外嵌入。

    額外的動態實數協變數可以與此張量連線,但需要注意的是,這些特徵必須在預測時已知。

    這裡的 num_features 等於 config.num_time_features+config.num_dynamic_real_features`。

  • future_observed_mask (torch.BoolTensor,形狀為 (batch_size, sequence_length)(batch_size, sequence_length, input_size)可選) — 布林掩碼,用於指示哪些 future_values 是觀測到的,哪些是缺失的。掩碼值選自 [0, 1]

    • 1 表示值是觀測到的
    • 0 表示值是缺失的(即被零替換的 NaN)。

    此掩碼用於過濾掉缺失值以進行最終損失計算。

  • decoder_attention_mask (torch.LongTensor,形狀為 (batch_size, target_sequence_length)可選) — 用於避免對特定標記索引執行注意力的掩碼。預設情況下,將使用因果掩碼,以確保模型只能檢視先前的輸入以預測未來。
  • head_mask (torch.Tensor,形狀為 (num_heads,)(num_layers, num_heads)可選) — 用於使自注意力模組的選定頭部無效的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭部未被遮蔽
    • 0 表示頭部被遮蔽
  • decoder_head_mask (torch.Tensor,形狀為 (decoder_layers, decoder_attention_heads)可選) — 用於使解碼器中注意力模組的選定頭部無效的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭部未被遮蔽
    • 0 表示頭部被遮蔽
  • cross_attn_head_mask (torch.Tensor,形狀為 (decoder_layers, decoder_attention_heads)可選) — 用於使交叉注意力模組的選定頭部無效的掩碼。掩碼值選自 [0, 1]

    • 1 表示頭部未被遮蔽
    • 0 表示頭部被遮蔽
  • encoder_outputs (tuple(tuple(torch.FloatTensor)可選) — 元組包含 last_hidden_statehidden_states (可選) 和 attentions (可選) last_hidden_state,形狀為 (batch_size, sequence_length, hidden_size) (可選),是編碼器最後一層輸出的隱藏狀態序列。在解碼器的交叉注意力中使用。
  • past_key_values (list[torch.FloatTensor]可選) — 預計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於加速順序解碼。這通常包括模型在解碼前一階段返回的 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

  • output_hidden_states (bool可選) — 是否返回所有層的隱藏狀態。更多詳情請參閱返回張量下的 hidden_states
  • output_attentions (bool可選) — 是否返回所有注意力層的注意力張量。更多詳情請參閱返回張量下的 attentions
  • use_cache (bool可選) — 如果設定為 True,則返回 past_key_values 鍵值狀態,可用於加速解碼(參見 past_key_values)。
  • return_dict (bool可選) — 是否返回 ModelOutput 而不是普通元組。
  • cache_position (torch.LongTensor,形狀為 (sequence_length)可選) — 指示輸入序列標記在序列中位置的索引。與 position_ids 相反,此張量不受填充影響。它用於在正確位置更新快取並推斷完整的序列長度。

返回

transformers.modeling_outputs.Seq2SeqTSModelOutputtuple(torch.FloatTensor)

一個 transformers.modeling_outputs.Seq2SeqTSModelOutput 或一個 torch.FloatTensor 元組(如果傳入 return_dict=Falseconfig.return_dict=False),根據配置 (InformerConfig) 和輸入包含各種元素。

  • last_hidden_state (torch.FloatTensor,形狀為 (batch_size, sequence_length, hidden_size)) — 模型解碼器最後一層輸出的隱藏狀態序列。

    如果使用了 past_key_values,則只輸出形狀為 (batch_size, 1, hidden_size) 的序列的最後一個隱藏狀態。

  • past_key_values (EncoderDecoderCache可選,當傳入 use_cache=Trueconfig.use_cache=True 時返回) — 這是一個 EncoderDecoderCache 例項。更多詳情請參見我們的 kv 快取指南

    包含預先計算的隱藏狀態(自注意力塊和交叉注意力塊中的鍵和值),可用於(參見 past_key_values 輸入)加速順序解碼。

  • decoder_hidden_states (tuple(torch.FloatTensor)可選,當傳入 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(如果模型有嵌入層,則一個用於嵌入輸出,加上一個用於每個層的輸出),形狀為 (batch_size, sequence_length, hidden_size)

    解碼器在每個層輸出的隱藏狀態,加上可選的初始嵌入輸出。

  • decoder_attentions (tuple(torch.FloatTensor)可選,當傳入 output_attentions=Trueconfig.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 之後,用於計算交叉注意力頭中的加權平均。

  • encoder_last_hidden_state (torch.FloatTensor,形狀為 (batch_size, sequence_length, hidden_size)可選) — 模型編碼器最後一層輸出的隱藏狀態序列。

  • encoder_hidden_states (tuple(torch.FloatTensor)可選,當傳入 output_hidden_states=Trueconfig.output_hidden_states=True 時返回) — torch.FloatTensor 的元組(如果模型有嵌入層,則一個用於嵌入輸出,加上一個用於每個層的輸出),形狀為 (batch_size, sequence_length, hidden_size)

    編碼器在每個層輸出的隱藏狀態,加上可選的初始嵌入輸出。

  • encoder_attentions (tuple(torch.FloatTensor)可選,當傳入 output_attentions=Trueconfig.output_attentions=True 時返回) — torch.FloatTensor 的元組(每個層一個),形狀為 (batch_size, num_heads, sequence_length, sequence_length)

    編碼器的注意力權重,在注意力 softmax 之後,用於計算自注意力頭中的加權平均。

  • loc (torch.FloatTensor,形狀為 (batch_size,)(batch_size, input_size)可選) — 每個時間序列上下文視窗的偏移值,用於使模型輸入具有相同量級,然後用於移回原始量級。

  • scale (torch.FloatTensor,形狀為 (batch_size,)(batch_size, input_size)可選) — 每個時間序列上下文視窗的縮放值,用於使模型輸入具有相同量級,然後用於縮放回原始量級。

  • static_features (torch.FloatTensor,形狀為 (batch_size, feature size)可選) — 批次中每個時間序列的靜態特徵,在推理時複製到協變數。

InformerForPrediction 的前向傳播方法,覆蓋了 __call__ 特殊方法。

儘管前向傳播的配方需要在此函式中定義,但在此之後應呼叫 Module 例項而不是此函式,因為前者負責執行預處理和後處理步驟,而後者則默默地忽略它們。

示例

>>> from huggingface_hub import hf_hub_download
>>> import torch
>>> from transformers import InformerForPrediction

>>> file = hf_hub_download(
...     repo_id="hf-internal-testing/tourism-monthly-batch", filename="train-batch.pt", repo_type="dataset"
... )
>>> batch = torch.load(file)

>>> model = InformerForPrediction.from_pretrained(
...     "huggingface/informer-tourism-monthly"
... )

>>> # during training, one provides both past and future values
>>> # as well as possible additional features
>>> outputs = model(
...     past_values=batch["past_values"],
...     past_time_features=batch["past_time_features"],
...     past_observed_mask=batch["past_observed_mask"],
...     static_categorical_features=batch["static_categorical_features"],
...     static_real_features=batch["static_real_features"],
...     future_values=batch["future_values"],
...     future_time_features=batch["future_time_features"],
... )

>>> loss = outputs.loss
>>> loss.backward()

>>> # during inference, one only provides past values
>>> # as well as possible additional features
>>> # the model autoregressively generates future values
>>> outputs = model.generate(
...     past_values=batch["past_values"],
...     past_time_features=batch["past_time_features"],
...     past_observed_mask=batch["past_observed_mask"],
...     static_categorical_features=batch["static_categorical_features"],
...     static_real_features=batch["static_real_features"],
...     future_time_features=batch["future_time_features"],
... )

>>> mean_prediction = outputs.sequences.mean(dim=1)
< > 在 GitHub 上更新

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