PyTorchでの転移学習の実現方法は何ですか。
PyTorchでの転移学習の実装には通常、以下の手順が含まれます。
- 事前学習モデルの読み込み:最初に、ImageNetデータセットで訓練されたような事前訓練済みモデルを読み込みます。
import torch
import torchvision.models as models
model = models.resnet18(pretrained=True)
- 最後の層を変更する:通常、転移学習の目的は、事前に訓練されたモデルを新しいタスクに適用することであるため、モデルの最後の層を新しいタスクの出力層に置き換える必要があります。このステップは、モデルの全結合層を変更することで実現できます。
n_features = model.fc.in_features
model.fc = torch.nn.Linear(n_features, num_classes) # num_classes为新任务的类别数
- パラメーターを凍結する:転移学習では、通常、事前学習済みモデルのパラメーターを凍結し、新しく追加された層のパラメーターのみをトレーニングします。パラメーターのrequires_grad属性を設定することで、パラメーターを凍結することができます。
for param in model.parameters():
param.requires_grad = False
- 新しいタスクに適した損失関数と最適化手法を定義する。
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.001)
- モデルのトレーニング:新しいデータセットを使用して、モデルをトレーニングします。
for epoch in range(num_epochs):
for inputs, labels in dataloader:
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
loss.backward()
optimizer.step()
以上の手順を経ることで、移行学習を実現することができます。これにより、事前に訓練されたモデルを使用して、新しいタスクで素早くモデルのトレーニングが可能となります。