270
ラベルを使用して1つのマルチラベル問題を解決しようとしています。ターゲットラベルを1つのホットエンコードフォームに変換しました。 BCEWithLogitsLoss()
を使用しています。トレーニングデータが不均衡なので、pos_weight
引数を使用していますが、私は少し混乱しています。
pos_weight
(テンソル、オプション) - 肯定的な例の重さ。クラス数の数に等しい長さのベクトルでなければなりません。
テンソルとして各ラベルの正の価値の総数を合計数の数にする必要があります。
@ 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
はあなたが体重を適用しようとしているデータセットです。