見出し画像

Google Colabを使用して、Google Driveから画像データを読み込んで転移学習モデルを使用して二値分類を行うスクリプト

Google Colabを使用して、Google Driveから画像データを読み込んで転移学習モデル(例: AlexNet、VGG16、DenseNet、Inception)を使用して二値分類を行うスクリプトを以下に示します。以下のスクリプトはPyTorchを使用しています。

まず、Google Driveにアクセスするための準備が必要です。以下のコードを実行して、Google Driveとの連携を行います。

from google.colab import drive

# Google Driveをマウント
drive.mount('/content/drive')

上記のコードを実行すると、表示されるURLにアクセスして認証コードをコピーし、入力してください。これにより、Google DriveがColab上でマウントされます。
次に、以下のコードを使用して画像データを読み込み、転移学習モデルを構築し、二値分類を行います。なお、選択する転移学習モデルによっては、モデルの構築部分が変わります。

import torch
import torch.nn as nn
import torch.optim as optim
from torch.utils.data import DataLoader
from torchvision import datasets, transforms, models
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 1. Google Driveからデータを読み込む
data_path = '/content/drive/My Drive/path_to_your_data_folder'
# ここで 'path_to_your_data_folder' を実際のデータがあるフォルダのパスに変更してください

# 2. データの前処理
transform = transforms.Compose([
    transforms.Resize((224, 224)),
    transforms.ToTensor(),
])

# 3. データセットの作成
dataset = datasets.ImageFolder(root=data_path, transform=transform)

# 4. データセットの分割(例: 80%のデータを訓練用、20%をテスト用に使用)
train_data, test_data = train_test_split(dataset, test_size=0.2, random_state=42)

# 5. DataLoaderの作成
train_loader = DataLoader(train_data, batch_size=32, shuffle=True)
test_loader = DataLoader(test_data, batch_size=32, shuffle=False)

# 6. 転移学習モデルの構築(例: VGG16)
model = models.vgg16(pretrained=True)
# ここで使用するモデルを選択してください

# 最終の全結合層の出力ユニット数を2に変更(二値分類なので)
model.classifier[6] = nn.Linear(in_features=model.classifier[6].in_features, out_features=2)

# 7. 損失関数とオプティマイザの定義
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(model.parameters(), lr=0.001, momentum=0.9)

# 8. モデルの訓練
num_epochs = 10

for epoch in range(num_epochs):
    model.train()
    for inputs, labels in train_loader:
        optimizer.zero_grad()
        outputs = model(inputs)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

    # 9. テストデータで評価
    model.eval()
    all_preds = []
    all_labels = []
    with torch.no_grad():
        for inputs, labels in test_loader:
            outputs = model(inputs)
            _, preds = torch.max(outputs, 1)
            all_preds.extend(preds.cpu().numpy())
            all_labels.extend(labels.cpu().numpy())

    accuracy = accuracy_score(all_labels, all_preds)
    print(f'Epoch {epoch+1}/{num_epochs}, Accuracy: {accuracy}')

# 10. モデルの保存
torch.save(model.state_dict(), '/content/drive/My Drive/path_to_save_model.pth')
# ここで 'path_to_save_model.pth' を保存先のパスに変更してください

このスクリプトでは、VGG16を使用していますが、他のモデルを利用する場合は、models.vgg16(pretrained=True)の部分を変更してください。また、保存先のパスや学習率、エポック数なども必要に応じて変更してください。

この記事が気に入ったらサポートをしてみませんか?