■
Pytrochの勉強
ディープラーニングの勉強に関するメモです. 使用しているのはこの本.
第一章 画像分類と転移学習(VGG)
理論・テクニック
転移学習(Transfer learning):学習済みモデルをベースに,最終の出力層を付け替えて学習させる.自前のデータが少量でも性能が出るネットワークを実現しやすい.
ファインチューニング(Fine tuning):入力層に近い層の結合パラメータも学習済の値から更新させる. 入力層に近い部分のパラメータは学習率を小さく設定し,出力層に近い部分のパラメータは学習率 大きく設定するのが一般的.
訓練時にはデータオーギュメンテーションを実施する.データに対してepochごとに異なる画像変換を適用し,データを水増しする. 画像変換の例として,リサイズ,アスペクト比の変更,回転などがある. これらの処理をランダムで行う.
実装
PyTorchでディープラーニングの計算結果を完全に再現できるように設定したい場合に、GPUを使用するケースでは別途以下の設定が必要. これをやると速度が遅くなる.
torch.backends.cudnn.deterministic = True torch.backends.cudnn.benchmark = False
https://pytorch.org/docs/stable/notes/randomness.html
画像分類タスクのデータセットを作成する場合,torchvision.datasets.ImageFolderを使用するのが簡単. PyTorchのDatasetクラスを継承して書き換えるのも良い.
データオーグメンテーションにはtransformsを使う.
学習の際,requires_grad = True と設定したパラメータは誤差逆伝搬で勾配が計算され,学習時に値が変化する. 一方で,requires_grad = False と設定したパラメータは学習時に値が変化しない. パラメータは,models.named_parametersに格納されている.
Pytorchでは,イテレーションごとのネットワークのforwardおよびlossの計算方法がある程度一定であれば,torch.backends.cudnn.benchmark = Trueと設定することでGPUの計算が高速化される.