快捷方式

AdaptiveLogSoftmaxWithLoss

class torch.nn.AdaptiveLogSoftmaxWithLoss(in_features, n_classes, cutoffs, div_value=4.0, head_bias=False, device=None, dtype=None)[source][source]

高效的 softmax 近似。

如 Edouard Grave, Armand Joulin, Moustapha Cissé, David Grangier 和 Hervé Jégou 在《Efficient softmax approximation for GPUs》中所述。

自適應 softmax 是一種用於訓練具有大型輸出空間的模型的近似策略。當標籤分佈高度不平衡時,例如在自然語言建模中,詞頻分佈大致遵循齊普夫定律(Zipf’s law),這種策略最為有效。

自適應 softmax 根據標籤的頻率將標籤劃分為多個簇。這些簇可以包含不同數量的目標。此外,包含不常見標籤的簇會為這些標籤分配較低維度的嵌入,從而加快計算速度。對於每個 minibatch,僅評估包含至少一個目標的簇。

其理念是,那些被頻繁訪問的簇(例如第一個簇,包含最常見的標籤)也應該計算開銷較低——也就是說,它們包含少量被分配的標籤。

強烈建議查閱原始論文以獲取更多詳細資訊。

  • cutoffs 應該是一個按遞增順序排序的整數序列。它控制簇的數量以及目標到簇的劃分。例如,設定 cutoffs = [10, 100, 1000] 意味著前 10 個目標將被分配到自適應 softmax 的“頭部”,目標 11, 12, …, 100 將被分配到第一個簇,目標 101, 102, …, 1000 將被分配到第二個簇,而目標 1001, 1002, …, n_classes - 1 將被分配到最後一個,即第三個簇。

  • div_value 用於計算每個附加簇的大小,其大小由 in_featuresdiv_valueidx\left\lfloor\frac{\texttt{in\_features}}{\texttt{div\_value}^{idx}}\right\rfloor 給出,其中 idxidx 是簇索引(不常見詞的簇索引較大,索引從 11 開始)。

  • head_bias 如果設定為 True,則會在自適應 softmax 的“頭部”新增一個偏置項。詳細資訊請參閱論文。在官方實現中設定為 False。

警告

作為輸入傳遞給此模組的標籤應按其頻率排序。這意味著最常見的標籤應由索引 0 表示,而最不常見的標籤應由索引 n_classes - 1 表示。

注意

此模組返回一個帶有 outputloss 欄位的 NamedTuple。詳細資訊請參閱進一步的文件。

注意

要計算所有類別的對數機率,可以使用 log_prob 方法。

引數
  • in_features (int) – 輸入張量的特徵數

  • n_classes (int) – 資料集中的類別數

  • cutoffs (Sequence) – 用於將目標分配到其桶的截止點

  • div_value (float, optional) – 用作計算簇大小的指數值。預設值:4.0

  • head_bias (bool, optional) – 如果為 True,則在自適應 softmax 的“頭部”新增偏置項。預設值:False

返回值

  • output 是一個大小為 N 的 Tensor,包含為每個示例計算的目標對數機率

  • loss 是一個 Scalar,表示計算出的負對數似然損失

返回型別

帶有 outputloss 欄位的 NamedTuple

形狀
  • 輸入: (N,in_features)(N, \texttt{in\_features})(in_features)(\texttt{in\_features})

  • 目標: (N)(N)()(),其中每個值滿足 0<=target[i]<=n_classes0 <= \texttt{target[i]} <= \texttt{n\_classes}

  • 輸出1: (N)(N)()()

  • 輸出2: Scalar

log_prob(input)[source][source]

計算所有 n_classes\texttt{n\_classes} 的對數機率。

引數

input (Tensor) – 一個示例的 minibatch

返回值

針對範圍在 0<=c<=n_classes0 <= c <= \texttt{n\_classes} 內的每個類別 cc 的對數機率,其中 n_classes\texttt{n\_classes} 是傳遞給 AdaptiveLogSoftmaxWithLoss 建構函式的引數。

返回型別

Tensor

形狀
  • 輸入: (N,in_features)(N, \texttt{in\_features})

  • 輸出: (N,n_classes)(N, \texttt{n\_classes})

predict(input)[source][source]

返回輸入 minibatch 中每個示例具有最高機率的類別。

這等同於 self.log_prob(input).argmax(dim=1),但在某些情況下更有效率。

引數

input (Tensor) – 一個示例的 minibatch

返回值

每個示例具有最高機率的類別

返回型別

輸出 (Tensor)

形狀
  • 輸入: (N,in_features)(N, \texttt{in\_features})

  • 輸出: (N)(N)

文件

查閱 PyTorch 全面的開發者文件

檢視文件

教程

獲取針對初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源