PytorchでFine-Tuning


転移学習とFine Tuninguの違い

– 転移学習:既存の学習済モデル(出力層以外の部分)を、重みデータは変更せずに特徴量抽出機として利用する。
– ファインチューニング:既存の学習済モデル(出力層以外の部分)を、重みデータを一部再学習して特徴量抽出機として利用する。

引用:”Keras / Tensorflowで転移学習を行う”

  1. PyTorchで転移学習

転移学習とFine-Tuningの違いは、

  1. 転移学習:出力層だけを学習させるか
  2. Fine-Tuning:出力層以外も学習させるか

PyTorchでは、

  1. 転移学習:出力層以外のパラメータを固定する
  2. Fine-Tuning:パラメータを固定しない(一部固定するも)

Fine-Tuning

今回は、ResNetを使用します。

Fine-Tuningでは、出力層以外のパラメータも更新します。

ResNetのパラメータを初期値として、再学習します。

今回は、パラメータを固定せずに、再学習させます。

入力画像のサイズ

入力画像のサイズは、(224, 224)なので、リサイズする必要があります。

data_transform = transforms.Compose([
    transforms.Resized(224),
    transforms.ToTensor(),
    transforms.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])
])

モデルの読み込み

from torchvision import models

net = models.resnet18(pretrained=True)

出力層のノード数の変更

出力層をnクラスに変更します。

今回は、2クラスとします。

#出力層をnクラスに変更
num_ftrs = net.fc.in_features
net.fc = nn.Linear(num_ftrs, 2).to(device)
net = net.to(device)

参考

Keras / Tensorflowで転移学習を行う