転移学習とFine Tuninguの違い
– 転移学習:既存の学習済モデル(出力層以外の部分)を、重みデータは変更せずに特徴量抽出機として利用する。
– ファインチューニング:既存の学習済モデル(出力層以外の部分)を、重みデータを一部再学習して特徴量抽出機として利用する。
転移学習とFine-Tuningの違いは、
- 転移学習:出力層だけを学習させるか
- Fine-Tuning:出力層以外も学習させるか
PyTorchでは、
- 転移学習:出力層以外のパラメータを固定する
- Fine-Tuning:パラメータを固定しない(一部固定するも)
転移学習
今回は、ResNetを使用します。
転移学習で重要なのは、”パラメータの固定”です。
pytorchでは、”requires_grad = False”でパラメータの固定をします。
入力画像のサイズ
入力画像のサイズは、(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)
パラメータの固定
転移学習では、モデルのパラメータを固定します。
#ネットワークのパラメータを固定 for param in net.parameters(): param.requires_grad = False
出力層のノード数の変更
出力層をnクラスに変更します。
今回は、2クラスとします。
#出力層をnクラスに変更 num_ftrs = net.fc.in_features net.fc = nn.Linear(num_ftrs, 2).to(device) net = net.to(device)