私はクラスインバランスを使ったセマンティックセグメンテーションのためにネットをトレーニングしようとしています。これを説明するために、私はInfoGainLossレイヤーを実装しようとしましたが、代わりにhereとして投稿されたinfogain_matrixを指定しました。ここでは各対角要素に対して1周波数(クラス)を使用しました。
しかし、netをトレーニングすると、精度と損失の両方がbase_lrが低くてもすぐに0に収束し、ネットラベルではすべてがクラス0(「不明」)になります。私の質問は今、私がリンクしているポストのようにinfogain_matrixを指定する必要があるかどうかです。もしそうならば、ネットの異常な振る舞いには他に何らかの理由があります(私は損失0精度1または損失INF精度0のいずれかを期待しました)。InfoGainLossは精度と損失を0にします
編集:
は、私が代わりにInfoGainLossのSoftMaxWithLoss層とネットを実行するときに、それはすぐに最も代表的なクラス(90%とのClass1)としてすべてを分類するために開始し、もはや変更されません。私の推測では、infogain_matrixのlmdbが正しく構成されていないということです。 caffe documentation for the layerはそう言っていませんが、誰かがcaffeデータレイヤのlmdbのdtypeを指定する必要があるかどうかを知っていますか(画像とinfogain_matrixはfloat32として格納されます)?また、caffeデータレイヤーがlmdbから期待しているdtypesは何ですか? から取られ/変更されたコードを使用して、lmdbsが生成されたが、画像平均の減算は、優先的に実行された。私はPythonでlmdbのreadoutをテストしました。ここではdtypeを指定しなければなりませんでした。さもなければ元の行列の次元にエラーが発生しました。
EDIT2:
ので間違いは確かDTYPE =フロート用として、データがhereを参照してください、代わりにdatum.dataのdatum.float_dataに追加する必要があり、lmdb定義にありました。今度はすべてが大丈夫で、精度と損失はロッカーではありません:)