私は、多数のクラス(1000)を持つマルチラベル分類のためのニューラルネットワークを訓練しています。つまり、入力ごとに複数の出力をアクティブにすることができます。平均して、出力フレームごとに2つのクラスがアクティブです。クロスエントロピー損失を伴うトレーニングでは、ニューラルネットワークは、ラベルの99.8%がゼロであるため、この出力で最小の損失しか得られないため、ゼロのみを出力します。どのように私は正のクラスに多くの重量を与えるためにネットワークをプッシュすることができます上の任意の提案?多数のクラスを持つマルチラベル分類のためのニューラルネットワークは、ゼロだけを出力します
3
A
答えて
2
Tensorflowには、損失関数weighted_cross_entropy_with_logits
があり、これは1に大きな重みを付けるために使用できます。だからあなたのような疎なマルチラベル分類にも適用できるはずです。 documentationから
:
これは、そのpos_weight除くsigmoid_cross_entropy_with_logits()のようなものである一方は負の誤差に正の誤差の相対的なコストアップにより、またはダウン重み付け再現率と精度のトレードオフを可能にします。
:あなたはKerasでtensorflowバックエンドを使用する場合は、あなたがこのような損失関数(Keras 2.1.1)を使用することができますimport tensorflow as tf import keras.backend.tensorflow_backend as tfb POS_WEIGHT = 10 # multiplier for positive targets, needs to be tuned def weighted_binary_crossentropy(target, output): """ Weighted binary crossentropy between an output tensor and a target tensor. POS_WEIGHT is used as a multiplier for the positive targets. Combination of the following functions: * keras.losses.binary_crossentropy * keras.backend.tensorflow_backend.binary_crossentropy * tf.nn.weighted_cross_entropy_with_logits """ # transform back to logits _epsilon = tfb._to_tensor(tfb.epsilon(), output.dtype.base_dtype) output = tf.clip_by_value(output, _epsilon, 1 - _epsilon) output = tf.log(output/(1 - output)) # compute weighted loss loss = tf.nn.weighted_cross_entropy_with_logits(targets=target, logits=output, pos_weight=POS_WEIGHT) return tf.reduce_mean(loss, axis=-1)
引数pos_weightは正のターゲットのための乗数として使用されています
次に、あなたのモデルに:うまく機能した値を報告し、まだ
model.compile(loss=weighted_binary_crossentropy, ...)
私が発見していない多くのリソースクラス数、平均アクティブクラスなどとの関係でpos_weight
の場合
関連する問題
- 1. 回帰と分類を組み合わせた多出力ニューラルネットワーク
- 2. マルチラベル分類のためのXgブースト?
- 3. マルチラベル分類はすべてゼロに収束します
- 4. CNTKノーホットベクトル出力を持たないニューラルネットワーク(マルチクラス分類器)
- 5. 多クラス分類ニューラルネットワーク...私は混乱しています
- 6. マルチラベル分類のためのトレーニングデータセットを準備する
- 7. オブジェクトの1つのクラスだけを検出するニューラルネットワーク
- 8. マルチラベル分類用のケラスについて
- 9. Pythonベースのマルチラベル分類
- 10. Scikit-learnマルチラベル分類
- 11. マルチラベル分類のためのハミング損失の勾配計算
- 12. テンソルフローネットワークのテスト:マルチラベル分類のためのin_top_k()置換
- 13. マルチラベル分類のための不均衡なデータセットの扱い
- 14. 部分ラベルのないTensorflowマルチラベル分類
- 15. ダイナミックな出力ノード数を持つニューラルネットワークの作成方法は?
- 16. 多出力ニューラルネットワークTensorflow
- 17. matlabのニューラルネットワーク分類
- 18. 複数の出力ニューロンを持つニューラルネットワークの逆伝播
- 19. Pythonは、多変数関数出力のためにリスト内包を持つループをネストしました。
- 20. Caffeによるマルチラベル分類
- 21. マルチラベル分類からのroc_curveは勾配を持っています
- 22. ボタンは1つの数字だけを出力します
- 23. Tensorflowのマルチクラス分類における出力クラスの制限
- 24. は、マルチラベル分類にSoftmaxを適用したクロスエントロピーですか?
- 25. Kerasはマルチラベル分類をどのように扱いますか?
- 26. クラスタリングタスク用の「重み付きラベル」を使用したマルチラベル分類
- 27. 年齢ニューラルネットワーク序数分類
- 28. スケルカンで複数の出力を持つニューラルネットワーク
- 29. マルチラベル分類のための開始モデルv3モデルの学習方法は?
- 30. ニューラルネットワークがゼロ出力に収束する