web-dev-qa-db-ja.com

PYTORCHのBCEWITHLOGITSLOSSの不均衡な重みを計算する方法

270ラベルを使用して1つのマルチラベル問題を解決しようとしています。ターゲットラベルを1つのホットエンコードフォームに変換しました。 BCEWithLogitsLoss()を使用しています。トレーニングデータが不均衡なので、pos_weight引数を使用していますが、私は少し混乱しています。

pos_weight(テンソル、オプション) - 肯定的な例の重さ。クラス数の数に等しい長さのベクトルでなければなりません。

テンソルとして各ラベルの正の価値の総数を合計数の数にする必要があります。

8
Naresh

@ CRYPDICKの答えを素早くリビジョンするためだけに、この関数のこの実装は私のために働いていました:

def calculate_pos_weights(class_counts,data):
    pos_weights = np.ones_like(class_counts)
    neg_counts = [len(data)-pos_count for pos_count in class_counts]
    for cdx, (pos_count, neg_count) in enumerate(Zip(class_counts,  neg_counts)):
        pos_weights[cdx] = neg_count / (pos_count + 1e-5)

    return torch.as_tensor(pos_weights, dtype=torch.float)
 _

dataはあなたが体重を適用しようとしているデータセットです。

0
aesthetic420