評價此頁

AdaptiveLogSoftmaxWithLoss#

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

高效的 softmax 近似。

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

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

自適應 Softmax 根據頻率將標籤劃分為幾個簇。這些簇可能包含不同數量的目標。此外,包含不頻繁標籤的簇會為這些標籤分配較低維度的嵌入,這會加快計算速度。對於每個小批次,僅評估至少包含一個目標的簇。

其思想是,經常訪問的簇(例如第一個簇,包含最頻繁的標籤)也應該計算成本低廉——即,包含少量分配的標籤。

我們強烈建議您仔細閱讀原始論文以獲取更多詳細資訊。

  • 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 表示。

注意

此模組返回一個 NamedTuple,其中包含 outputloss 欄位。有關詳細資訊,請參閱進一步的文件。

注意

要計算所有類的對數機率,可以使用 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 是一個標量,表示計算出的負對數似然損失

返回型別

NamedTuple,包含 outputloss 欄位

形狀
  • 輸入:(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

forward(input_, target_)[原始碼]#

執行前向傳播。

返回型別

_ASMoutput

log_prob(input)[原始碼]#

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

引數

input (Tensor) – 一個小批次示例

返回

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

返回型別

張量

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

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

predict(input)[原始碼]#

為輸入小批次中的每個示例返回機率最高的類別。

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

引數

input (Tensor) – 一個小批次示例

返回

每個示例中機率最高的類別

返回型別

output (Tensor)

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

  • 輸出:(N)(N)

reset_parameters()[原始碼]#

根據 __init__ 中使用的初始化重置引數。