文脈化
特定の画像で 3 つのカテゴリを識別するモデルを構築しています。
次の 3 つのカテゴリがあります。
性別:男性/女性
タイプのコート:ブレザー、ブレザー&ジャケット、ブラウス、カーディガン、コート、コート&ジャケット、キュロット、ドレス、ジーンズ、ジャンパー、ジャンプスーツ&ダンガリー、ニットウェア&スウェットシャツ、レギンス&シガレットパンツ、マタニティ、ポロ、ポロロン、シャツ、ショーツ、スカート、スーツ、水着、水着&ビーチウェア、T -シャツ、Tシャツ、トップス、ズボン、チュニック。
- 服の色:ベージュ、黒、青、茶色、緑、灰色、オレンジ、ピンク、赤、白、黄色。
つまり、すべての画像にこれら 3 つのカテゴリが必要です (カテゴリごとに 1 つの値)。
データモデルをトレーニング
するためのデータベースは、1812枚の画像と、各画像の 3 つのカテゴリの値 (およびその URL) を含む Excel ファイルで構成されています。
ここに私のデータベースに関するいくつかの情報があります:
- 男性の数: 759
- 女性の数: 1055
- また、各属性 (各カテゴリの) がデータベースに表示される回数も把握しています (すべてをリストすることはできませんが、解釈に役立つ情報があれば、その情報を送信できます)。
- 最も多い三つ子は(男性、ジーンズ、青):66回
私がやった
こと マルチラベル分類のコンテキストにいることは明らかでした。
1. データをクリーンアップして前処理する( X,Y)
データ
を作成しました。ここで、Xは(1814,204,204,3) の形状で、Yは(1814,39)の形状です'' 39 はダミー変数に対応します: カテゴリ 1 は2 つの属性、カテゴリ 2 には 26 の属性があり、カテゴリ 3 には 11 の属性があるため、合計は 39 '' になります。2. ニューラル ニューラル ネットワーク
の構築 モデルのさまざまなパラメーターは次のとおりです。
- エポック = 100
- レート = 0.001
- 減衰 = レート/エポック
- sgd = SGD(lr=lrate、運動量=0.9、減衰=減衰、ネステロフ=False)
- 損失=binary_crossentropy
- オプティマイザー=sgd
- 指標=精度
私の訓練されたネットワークの構造は次のとおりです。
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
conv2d_3 (Conv2D) (None, 204, 204, 32) 896
_________________________________________________________________
dropout_3 (Dropout) (None, 204, 204, 32) 0
_________________________________________________________________
conv2d_4 (Conv2D) (None, 204, 204, 32) 9248
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 102, 102, 32) 0
_________________________________________________________________
flatten_2 (Flatten) (None, 332928) 0
_________________________________________________________________
dense_3 (Dense) (None, 512) 170459648
_________________________________________________________________
dropout_4 (Dropout) (None, 512) 0
_________________________________________________________________
dense_4 (Dense) (None, 39) 20007
_________________________________________________________________
activation_1 (Activation) (None, 39) 0
=================================================================
Total params: 170,489,799
Trainable params: 170,489,799
Non-trainable params: 0
質問
- 私の metric ='accuracy' は良い選択ではないと思います: それは起こっていることの現実を反映していません. たとえば、トレーニング データに対して評価テストを実行し、0.95 (すべてのビンの 95% が適切に分類されている) を得ましたが、それはモデルがうまく機能していることを意味しません。 39 個のコンポーネントと残りのすべてがゼロです..したがって、多くのゼロを持つ可能性が高く、したがって、36/39 の精度があるよりも悪い場合でも、39 個の値が 0 (何も検出されない) と予測されます。実際の問題を反映していないのはどれですか?(これが結果として得られたものです。特定の X に対して、ゼロに近い多くの値を取得したため、しきい値 (0.5) を使用すると、すべてがゼロに等しくなります。
- モデルのパフォーマンスが悪いのは、画像が少ないことが原因だと思いますか? (ラベルごとの画像) ?
- ニューラル ネットワークの構造が良くないために、私のモデルのパフォーマンスが悪いと思いますか? 最先端の技術では、これらのレイヤーがエッジの検出を担当しているため、最初のレイヤーを修正する事前トレーニング済みのモデルを使用しようとしました。次のレイヤーのみをトレーニングしました。その場合、悪い結果も得られます (「精度」メトリックで計算) ?
- 要約すると、私の問題に対する普遍的な解決策がない可能性があることはわかっていますが、少なくとも、この種の問題の原因とその解決方法を知りたいですか? したがって、特に出力に多くのラベルを持つマルチラベル分類に取り組んだ人々からの助けを歓迎します