質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

Q&A

2回答

351閲覧

ディープラーニングを用いた2値分類

退会済みユーザー

退会済みユーザー

総合スコア0

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Visual Studio 2013

Microsoft Visual Studio 2013は、Microsoftによる統合開発環境(IDE)であり、多種多様なプログラミング言語に対応しています。 Visual Studio 2012の次のバージョンです

0グッド

1クリップ

投稿2017/08/18 07:22

ライブラリを使用しDeepLearningを実装した上で、ファインチューニングを行い2値分類を行おうと考えています。
2値の内訳としては,dogカテゴリとdog以外のその他の任意の画像(他の動物の画像~風景画等)としたいとかんがえ、訓練データをdogとその他任意の画像(猫等)それぞれ500枚ずつ用意の上実行を行った結果,過学習が生じてしまい、dogは全てdogと出来ましたが、その他の任意の画像を与えた場合においても全てdogカテゴリへと分類されました。
訓練枚数を2倍にした上で検証を重ねましたが同様に効果が得られませんでした。
訓練データに原因があると考えられますが、正しく判別が行われるようにするためにはどの様にすれば良いのでしょうか?
画像枚数を増やした方がいいのでしょうか?
ご存知の方宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

以下、原因を考察する上で検証すべき項目です。

  • 学習係数、バッチサイズが大きすぎないか?
  • ファインチューニング前の学習結果そのものが過学習を起こしていないか?
  • 画像の枚数(パターン)を増やすしても過学習が発生するか?
  • 現在のネットワークでファインチューニングをせずに学習を行った場合過学習を起こさないか?

主にこの4つです。
まず、1つ目ですが、学習係数、バッチサイズが大きすぎると、大抵過学習を起こします。
これらの、一概にこの値が良いとは言い切れないので、操作してみて変化を確認してください。
この時、過学習を起こす場合、少ないepoch数でも過学習を起こすと思うので、epoch数を減らして、グリッドサーチなりすれば良いかと思います。
なお、バッチサイズについては、バッチノーマライゼーションがない場合、大きくしすぎると学習に失敗するイメージが有ります。

2つ目ですが、ファインチューニング前の事前学習で過学習を起こしている場合、大抵ファインチューニング後のネットワークも過学習しています。
なので、必ずファインチューニング前のネットワークの状態は確認しましょう。

次に、3つ目ですが、画像のパターン数を増やしましょう。
確かにファインチューニングを行えば一般的な学習枚数よりも少ない枚数で高精度な学習を実現できるとされていますが、ある程度の数を揃えるにこしたことはないと思います。
なので、画像の枚数を1万枚程度まで増やしてみましょう。
今ある画像に対してフィルタリングやAffine変換して増やせば良いと思います。

最後に、4つ目ですが、そもそも現在のネットワーク構成が悪いのでは、という話です。
一度、画像の枚数を増やしてファインチューニングせずに学習させてみましょう。
今回の問題であれば、相当変なネットワーク構成にしていない限りそこそこの分類精度は出るはずです。

投稿2017/08/28 16:50

elda

総合スコア34

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

初歩的問題として単純に思いつくのは下記ですが
これらは検証・回避されていますでしょうか?

  • 学習後の中間層の重みが大きすぎる or 小さすぎる

重みの初期値が正しく設定されていない(0になってしまっている) or
ファインチューニングの元となるモデルの重みが正しく読み込まれていない
教師データの値が正規化されていない(大きすぎる or 小さすぎる)
層を積みすぎている
などの原因が考えられます
この状態が発生している場合
dogとdog以外のクラスラベルを逆にして学習させると
今度は逆にすべてdog以外と応えるようになるはずです

  • 教師データの与え方がdog500枚 → dog以外500枚 の順番

学習フェーズが1枚ごとの場合
「とりあえずdogと言っとけば正解だ」と学習してしまい
dog以外を受け付けなくなってしまう
dogとdog以外の教師データの与え方をランダムにする事で解決する

  • 教師データがdogのみかほぼdog → dog以外で検証

サンプルの不均衡によって起こる問題です
サンプルは同数用意されている様ですので
これが起こっているとするなら
単純にコード上での割当のミスと考えられます

また
コードは掲載できないとしても
ご使用になっているライブラリや
ファインチューニングの元としたモデル名
ファインチューニングの概要
参考にしたサンプルコード・サイト
などを追記すれば
回答もされやすくなると思います

投稿2017/08/25 04:52

e-cube

総合スコア284

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問