GoogleNetの​accuracyを改​善する方法につきまし​て

プログラミング初心者です。
以下のリンクをもとにgooglenetでDICOM ファイルのclassificationを行いました
以下のコードを削除したり、optionでmaxepochの数やmini-batch sizeを調整しているのですが、なかなかaccuracyは上がらず55%です。
pixelRange = [-30 30];
scaleRange = [0.9 1.1];
imageAugmenter = imageDataAugmenter( ...
'RandXReflection',true, ...
'RandXTranslation',pixelRange, ...
'RandYTranslation',pixelRange, ...
'RandXScale',scaleRange, ...
'RandYScale',scaleRange);
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain, ...
'DataAugmentation',imageAugmenter);
alexnetでは90%近いaccuracyを出せているので、googlenetではなぜこういった問題が生じているかご存じでしたらご教示頂けますと幸いです。

 采纳的回答

Kenta
Kenta 2019-2-20

2 个投票

maxepochやminibatchsizeのほかに、初期学習率や、モーメンタム、L2正則、learnratedropfactorなどがあります。
初期学習率やモーメンタムは変更されましたか?
また、学習曲線はどのようになっていますでしょうか?変更可能なパラメータがたくさんあって、迷ってしまいますが、学習曲線があれば、少し見当がつけられるかもしれません。
またalexnetで90%ほどの精度なのであれば、もしかしたら、うまく走っていないのかもしれません。
(実はファイルのなかでカテゴリが混在している、など)それか、カテゴリ間で画像枚数にかたよりがあれば、精度がさがることもあります。
ただ、私の経験では、alexnet, googlenetの精度はそこまで大きく変わらないような気もするのですが、もしかしたらネットワークやそのデフォルトの値で大きく変わるのかもしれません。
また、計算に少し時間はかかりますが、ベイズ的最適化でパラメータを決定するのも良いと思います。googlenetのファイルを関数として、ベイズ的最適化のコードに組み込めば、自動的にパラメータをしぼりこんでくれます。
https://jp.mathworks.com/help/deeplearning/examples/deep-learning-using-bayesian-optimization.html

9 个评论

ssk
ssk 2019-2-20
スクリーンショット 2019-02-20 18.29.52.png
Itakura様、ご連絡ありがとうございます。学習曲線のスクリーンショットを添付いたします。初期学習率や、モーメンタム、L2正則、learnratedropfactorにつきましても調整してみます。
トレーニングデータに対しては、ほぼ100%フィッティングしていますね。それに対し、テストデータでは精度があがりきっていないので、過学習をしているようにも見えます。しかし、なんとなく、過学習の曲線とは異なるような気もします。
1点質問があります。トレーニングデータとテストデータはどのように分けていますか?splitEachLabel関数で8:2、などに分けていますか?それともテストデータは別で読み込んでいますか?
過学習だと、モーメンタムの値を大きくしたり、後半あたりのdropoutの大きさをあげたり(これはレイヤーの値を操作)、あとは削除した、とあった、データ拡張を加えたりします。
もし、テストデータがうまく読み込めていると確認できたら、
まずはモーメンタムなどの値をいろいろ変えてはどうかと思います。
ssk
ssk 2019-2-20
トレーニングデータとテストデータはsplitEachLabel関数で5:5に分けています。モーメンタムなどの値を変えてみます。
もしかして、訓練データ数がかなり少ないという状況でしょうか。
それだと不安定になって、alexnetと精度が大きく異なるということもありえると思います。
一度、spriteachlabelで8:2にわけて('randomized'する)、もし、rng('default')などの乱数を固定するコードがあればそれを削除して、もう一度精度を計算していただけますか?毎回訓練、テストデータの組が変わるので数回試行してみてください。
少し精度が上がるかもしれないのでその結果を教えていただけると幸いです。
ssk
ssk 2019-2-20
itakura様、ご回答ありがとうございます。
はい、現在、各クラス10枚のサンプルデータで行っていますが、実際は各クラス10,000枚ほどを想定しております。
クラスのデータ多めで試してみます。
それだとさきほどの例では各クラス5枚のトレーニングになってますね?
データが少ない分、学習が不安定になったと思います。例えば30枚くらい集まったらデータオーギュメンテーションも加えてやってみるのはどうでしょう。その際、maxepochの値を大きくすると、その倍数分データを水増しできると思います。
alexnetでよい結果が出た経験もあるならデータを増やせばうまく可能性も高いと思います。
ssk
ssk 2019-2-20
スクリーンショット 2019-02-21 06.51.44.png
試しに50枚でやってみたのですが横ばいが続ききちんと学習できているとはいいがたいですね。。 dataaugmentationも含めて試してみます。
そうですか...報告ありがとうございます。
alexnetでうまくいったのなら、そちらに絞ってみてはどうでしょう。いろんな意味での、そのデータに対するネットワークの向き不向きもあると思いますので。
ssk
ssk 2019-2-20
はい! ご丁寧にありがとうございました!

请先登录,再进行评论。

更多回答(0 个)

类别

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!