VGG16学習済みモデルでファインチューニングをやってみるツイートシェアはてブGoogle+Pocket今回は、VGG16の学習済みモデルをファインチューニングし、少ない学習データで高い認識精度を持つモデルを作ってみます。前回、VGG16の学習済みモデルを使って、1000カテゴリーの一般物体認識をやってみました。その1000カテゴリー以外の物体を認識させたい時どうするのか、さらに大量の画像データを集めて、また長時間かけて学習する以外方法はないのでしょうか。そこで登場するのが、ファインチューニングです。これは、ニューラルネットワークが学習する時に、入力に近い層では点や線のような単純な模様を学習し、出力に近い層で複雑な模様を学習する性質を利用します。入力に近い層はベーシックな内容を学習しているのでここは新たに学習させず、出力に近い層のみ学習させるわけです。することで、少ない学習データでしかも早く学習が完了し、結構精度が出ます。いうことで、今回は、VGG16の学習済みモデルをファインチューニングし、少ない学習データで高い認識精度を持つモデルを作ってみます。データセットを準備します9/13のブログで使ったオリジナルデータセットを流用します。CNNを使って、画像を900枚(各225枚×4=900枚)学習させました。今回は、これと同じ条件で、VGG16の学習に画像を900枚だけ使ってファインチューニングし、認識精度がどうなるか試してみます。loss")plt.legend()plt.savefig("loss.png")plt.close()24行目からが、データセットを読み込む部分です。CelebAの画像データは、178×218ですので、36行目で128×128でセンタークロップし、37行目で224×224にリサイズしています。47行目で2000個の画像データを、学習:評価=45%:55%でランダムに分割しています。これによって、学習データは900枚になります。59行目からが、モデルを構築する部分です。学習した重みをそのまま使って学習させず、全結合3層のみ学習させます。オプチマイザーはSGDを使っています。98行目からが、ロス・精度の時系列グラフを作成する部分です。今回、学習させるのは、赤矢印の全結合3層(+Dropout)のみです。入力側の畳み込み13層は学習させません。使わずに学習した場合です(先ほどのプログラムのまま)。80%を超えていますので立ち上がりが早いです。9/13のCNNの場合と比べると、2〜3倍程度立ち上がりが早いです。ポイント向上しています。使って学習した場合です(プログラムにImageDataGeneratorを追加)。使わない場合と比べると立ち上がりはゆっくり目です。ポイント向上しています。まとめるとこんな形になります。ファインチューング、結構効果的な手法のようです。コメントをキャンセルメールアドレスが公開されることはありません。date*日本語が含まれない投稿は無視されますのでご注意ください。学習済みモデルでサクッと遊んでみるRECOMMENDこちらの記事も人気です。一目惚れして、ディープラーニングを始めました。初心者の試行錯誤をブログにしています。