個人的なメモ

技術メモがメインです.本ブログはあくまで趣味です.

Pytrochの勉強

ディープラーニングの勉強に関するメモです. 使用しているのはこの本.

honto.jp

第一章 画像分類と転移学習(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

github.com

画像分類タスクのデータセットを作成する場合,torchvision.datasets.ImageFolderを使用するのが簡単. PyTorchのDatasetクラスを継承して書き換えるのも良い.

データオーグメンテーションにはtransformsを使う.

Pythonイテレータを使って処理を繰り返すのが便利.

hhttps://python.ms/iterator/#_1-%E3%82%A4%E3%83%86%E3%83%AC%E3%83%BC%E3%82%BF%E3%82%92%E8%A7%A6%E3%81%A3%E3%81%A6%E3%81%BF%E3%82%8B%E3%80%82

学習の際,requires_grad = True と設定したパラメータは誤差逆伝搬で勾配が計算され,学習時に値が変化する. 一方で,requires_grad = False と設定したパラメータは学習時に値が変化しない. パラメータは,models.named_parametersに格納されている.

pytorch.org

Pytorchでは,イテレーションごとのネットワークのforwardおよびlossの計算方法がある程度一定であれば,torch.backends.cudnn.benchmark = Trueと設定することでGPUの計算が高速化される.