2017-10-09 4 views
0

まず第一に、私は質問と状況についてあなたに語ります。 私はchainerで複数ラベルの分類をしたいと私のクラスの不均衡の問題は非常に深刻です。チェイナーで損失重量を設定するには?

この場合、損失関数を計算するために、ベクトルをinorderでスライスする必要があります。たとえば、マルチラベル分類では、グラウンドトゥルースラベルベクトルのほとんどの要素は0であり、そのうちの数は1です。この場合、F .sigmoid_cross_entropyをすべての0/1要素に適用すると収束しないことがありますので、[[xx、xxx、...、xxx]]スライスを使用することにしました(最後のFCレイヤーによるchainer.Variable出力です)損失関数を計算することができます。 この場合、ラベルの不均衡のため希なクラスの低分類性能を引き起こす可能性があるので、逆伝播時に希なgt-label可変高損失ウェイトを設定したいが、メジャーラベルを設定する伝搬。

どうすればよいですか?チェーンラーでのマルチラベル不均衡クラス問題のトレーニングに関するあなたの提案は何ですか?

+0

私はsigmoid_cross_entropyのためのこの機能を見つけることができませんでしたが、 'softmax_cross_entropy'で' class_weight'を見つけることができます。 https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html#chainer.functions.softmax_cross_entropy sigmoid_cross_entropyの状況を採用するように実装を参照することもできます。 https://github.com/chainer/chainer/blob/v3.0.0rc1/chainer/functions/loss/softmax_cross_entropy.py#L249-L253 – corochann

+0

softmax_crossentropyはマルチラベル分類には適していません。マルチ-label問題1つのイメージに複数のラベルがある可能性がありますが、softmax_crossentropyを使用すると1つのラベルだけがTrueになる可能性があります。 – machen

+0

softmax_cross_entropyがマルチラベルの問題に適合しない場合、私はそれに対処する別の考え方をします.F.tile(pred)を使用して特定の要素(希少クラスの予測要素)を複数回コピーし、希少クラスの喪失が増強される可能性がありますか? (私はF.tileがこれを行うことができるかどうか分かりません) – machen

答えて

0

は、各空間的位置と加重平均のためaverage機能における損失値を得るために、(reduce='no'を通過させることによって)非低減モードのsigmoid_cross_entropy()を使用することができます。

sigmoid_cross_entropy()は、最初に、各空間ロケーションおよびバッチディメンションに沿った各データの損失値を計算し、空間次元とバッチ次元の平均または合計を取る(normalizeオプションに応じて)。 reduce='no'を渡すことで、還元部分を無効にすることができます。加重平均を実行する場合は、各場所で損失額を取得して自分で減らすことができるように指定する必要があります。

その後、手動で加重平均を行う最も簡単な方法は、平均化の重みを示すweight引数を受け入れることができるaverage()を使用しています。まず、入力とweightを使用して加重和を計算し、その結果をweightの合計で除算します。入力と同じ形状の適切なウェイト配列を渡して、sigmoid_cross_entropy(..., reduce='no')で取得した生の(未還元の)損失値とともにaverage()に渡すことができます。また、weightが適切にスケーリングされている場合(例えば、1までの合計)、ウェイト配列を手動で乗算してF.sum(score * weight)のような合計を取ることもOKです。

+0

ありがとうございます、あなたは本当に私をたくさん助けてくれます。私は多くの実験に重きを置くかもしれないと思う(深い学習のブラックボックスが黒すぎるため)。チューニングパラメータの手順はUncomfortableです。つまり、どのパラメータが損失と精度を最適にするかを観察するのに、何日も費やすことになります。チェーンャーに視覚化ツールと管理ツールがある場合、私たちはパラメータを調整するのがいいでしょう。 – machen

0

複数ラベル分類を行っている場合は、softmax_crossentropyの損失をどうですか?

softmax_crossentropyは、class_weight属性を指定することによって、クラスの不均衡を考慮に入れることができます。 https://github.com/chainer/chainer/blob/v3.0.0rc1/chainer/functions/loss/softmax_cross_entropy.py#L57

https://docs.chainer.org/en/stable/reference/generated/chainer.functions.softmax_cross_entropy.html

+1

softmax_crossentropyはマルチラベル分類には適していません。なぜなら、マルチラベル問題は1つのイメージに複数のラベルがありますが、softmax_crossentropy真であるのは1つだけであることを意味しますか? – machen

+0

softmax_cross_entropyがマルチラベルの問題に適合しない場合、私はそれに対処する別の考え方を持っています.F.tile(pred)を使用して特定の要素(希少クラス予測要素)を複数回コピーし、希少クラスの喪失が増強される可能性がありますか? (私はF.tileがこれを行うことができるかどうかわかりません) – machen

+0

あなたはそうです、私はマルチラベルと多ラベルを混同しています。 – hmm

関連する問題