めるぱんブログ

とある医大生の勉強の記録です

PythonとKerasによるディープラーニング 第5章③

前回は一からモデルを学習させることで画像の判別を行いましたが、今回は学習済みの畳み込みニューラルネットワークを使用してみます。

今回用いるのはVGG16です。これはImageNetという140万個のラベル付き画像と1000種類のクラスのデータセットを学習させたCNNです。

前の記事で記述しましたが、これをGPUを使用したところメモリ不足になってしまいその対処法を調べていてかなり時間がかかってしまいました。

 

学習済みCNNを使用する方法は2つあり、それぞれ特徴抽出とファインチューニングと呼ばれるやり方です。

 

特徴抽出

特徴抽出の方法は2つあります。

まず一つ目は新しいデータセット(今回はDogs vs. Cats)を畳み込みベース(Conv2DとMaxPooling2Dの部分)で実行し、新しい独立した全結合分類器(Dense層)の入力する方法です。

この方法はめちゃくちゃ楽で速いです。画像とラベルをNumPy配列にし、畳み込みベースを通します。そしてそのデータを新たに定義した全結合分類器に入れるだけです。問題点はデータの拡張ができないのでドロップアウトを入れても過学習が起きやすいという点です。

 

二つ目の方法は畳み込みベースの最後に全結合分類器を追加し、最初から最後まで一つのモデルで行い、入力から出力までを一連の動作としてする方法です。この際畳み込みベースは凍結し、重みが更新されないようにすることが重要です。この方法ではデータの拡張ができますが、計算負荷が高いためGPUが使用できないと厳しいです。

 

ファインチューニング

これは特徴抽出の二つ目の方法を行った後に畳み込み層の一部を解凍しもう一度訓練するという方法です。これによりさらに今行っている問題に対して適合したモデルができます。

しかし、注意点として解凍する層は2,3層にとどめ、またRMSpropの学習率を低く設定する必要があります。

 

 

ここまでの勉強で大まかな画像認識の流れをつかむことができたと思います。最後にこの章ではデータの可視化について勉強しますがこれで第5章は終了となります。

最初は右も左もわからない状況でしたが、だいたいふぉの方向を向けばいいのかくらいはわかるようになってきた気がします。

この本を読み終えたらしっかり実践できるようになれそうでとても勉強になります。