見出し画像

作りながら学ぶ!pytorchによる発展ディープラーニングPart1

1_image_classificationについて簡単なメモ

1.1学習済みVGGモデルを使用する方法

パッケージのimport

numpy:多次元配列、数値計算ツール
json:軽量のデータ交換フォーマット
PIL:画像読み込み
matplotlib:グラフとかの描画
torch:pytorch

学習済みモデルのロード

VGG-16:学習済みモデル、隠れ層が16層あるモデル
推論モード:pytorchのmodel.eval()で切り替える。学習済みモデルを元として、入力された画像が何迦予想するモード

入力画像の前処理クラスを作成

BaseTransform:画像の変換が行えるmean、stdはRGBの値
pytorchでは[色、高さ、幅]であるのに対してOpenCV、PILは[高さ、幅、色]であるから順番の入れ替えが必要
np.clipは最大最小値の指定が可能

出力結果からラベルを予想する後処理クラスを作成

ILSVRC:画像上の物体のクラスを予測する。ここの情報を辞書型変数として登録する
ILSVRCのなかでそれである確率が最大のラベル名乗っ取得するクラスを作成する

学習済みVGGモデルで手元の画像を予測

今まで作成したクラスを使用して手元の画像を読み込んで入力、予測結果をprintで出力する。
今回は→golden_retriever

引用

つくりながら学ぶ!PyTorchによる発展ディープラーニング | マイナビブックス (mynavi.jp) ここからコードのダウンロードをした。

NumPy -JSONPythonの画像処理ライブラリPillow(PIL)の使い方 | note.nkmk.meOpenCV・PIL・PyTorchの画像要素の順番と3次元配列のイメージの違い #Python - Qiita、G検定最強の合格テキスト

1.3「転移学習」で少量データの分類を実現する方法

事前準備

optim:最適化アルゴリズムが実装されているモジュール
nn:autogradのサポート用
乱数の設定:

DataSetを作成

データオーギュメンテーション:人為的に画像数を増やすこと。(平行移動、拡大縮小、回転など)
RandomResizedCrop:ランダムな割合で画像を切り取って、サイズの変更をする。
RandomHorizontalFlip:画像を水平反転する。確率も設定できる
ToTensor:数列へ変換する。
glob:すべてのパス名を取得できる。
→アリとハチのDataSetを作成する。今まで作成したClassを継承する。

DataLoaderを作成する

ミニバッチサイズを指定して、Loaderを作成し、辞書型変数にまとめる。一つ目の要素と、ラベルをprintとして動作の確認する。

ネットワークモデルを作成する

VGG-16モデルのロード、インスタンスの作成。出力ユニットをアリとハチの2つに付け替える。
訓練モードに設定

損失関数の定義

最適化手法を設定

学習させるパラメータ名を決めて、それ以外のパラメータの勾配計算をなくす(if文)
今回は確率的勾配降下法(SGD)

学習・検証を実施

モデル学習させる関数の作成
epochのループの中で学習と検証のループをする
train、evalそれぞれモードに振り分けるlossとcorrectsの表示。
純伝搬計算をするが、訓練時は誤差逆伝搬法で計算するloss,correctionの数値を更新する。
epochごとにlossとcorrectionを表示する。

引用

1.5「ファインチューニング」で精度向上を実現する方法

事前準備、Dateset,DataLoaderを作成するネットワークモデルの作成、損失関数の定義

最適化手法を設定

学習パラメータをparams_to_update1-3に格納する。パラメータの設定パラメータごとに各リストに格納する。lrの設定。

学習・検証を実施

ネットワークをGPUに変更する。1.3と処理自体は同じ

学習したネットワークを保存・ロードして終了


この記事が気に入ったらサポートをしてみませんか?