😽

間違ったchatGPTでの機会学習モデル(Pytorch)のご提案

2023/08/27に公開

なぜchatGptで機械学習モデル(Pytorch)を作成するのか

スマホアプリエンジニアが、chatGptを利用して機械学習モデルを作ってみた忘備録です。

機械学習プロジェクトはとにかく予算と工数がかかり、小規模なプロジェクトでも予算3000万で開発期間2年ぐらいは普通にかかります。

機械学習プロジェクトはどう頑張っても、数千万円の予算、年単位の開発期間が絶対に必要です。
これは機械学習プロジェクトの限界であり、絶対条件です。

以上を踏まえまして、

chatGptで作る機械学習は、予算0円、開発期間15秒です(真顔)

どうやって作るのか?

作成方法は、単にchatGptに、Pytochで機械学習モデルを作成するのを頼むだけです。
15秒ほどでモデルを作成してくれます。

以下をchatGptに打ち込んでください。

あなたは機械学習エンジニアです。Pytochを利用して、0-9の文字の画像を判別する機械学習モデルを作成してください。

google colabにchatGptから出力されたコードを貼り付けて実行すると98.88%の正答率(どれだけ正確に0-9を判別できたか)でした。

以下生成されたコード

Copy code
import torch
import torch.nn as nn
import torch.optim as optim
import torchvision
import torchvision.transforms as transforms

# データの前処理
transform = transforms.Compose([
    transforms.ToTensor(),  # 画像をテンソルに変換
    transforms.Normalize((0.5,), (0.5,))  # 平均と標準偏差で正規化
])

# MNISTデータセットのダウンロード
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transform, download=True)
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)

# CNNモデルの定義
class CNN(nn.Module):
    def __init__(self):
        super(CNN, self).__init__()
        self.conv1 = nn.Conv2d(in_channels=1, out_channels=16, kernel_size=3, padding=1)
        self.pool = nn.MaxPool2d(kernel_size=2, stride=2)
        self.conv2 = nn.Conv2d(in_channels=16, out_channels=32, kernel_size=3, padding=1)
        self.fc1 = nn.Linear(in_features=32 * 7 * 7, out_features=128)
        self.fc2 = nn.Linear(in_features=128, out_features=10)
    
    def forward(self, x):
        x = self.pool(torch.relu(self.conv1(x)))
        x = self.pool(torch.relu(self.conv2(x)))
        x = x.view(-1, 32 * 7 * 7)  # テンソルをフラットな形に変換
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# モデルの初期化と損失関数、最適化アルゴリズムの設定
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = CNN().to(device)
criterion = nn.CrossEntropyLoss()
optimizer = optim.Adam(model.parameters(), lr=0.001)

# モデルのトレーニング
num_epochs = 5
for epoch in range(num_epochs):
    for images, labels in train_loader:
        images, labels = images.to(device), labels.to(device)
        
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()
        
    print(f'Epoch [{epoch+1}/{num_epochs}], Loss: {loss.item():.4f}')

print("Training finished")

# テストデータでモデルを評価

test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transform, download=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

correct = 0
total = 0
with torch.no_grad():
    for images, labels in test_loader:
        images, labels = images.to(device), labels.to(device)
        outputs = model(images)
        _, predicted = torch.max(outputs, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f'Accuracy on test images: {(correct / total) * 100:.2f}%')

まとめ

もちろん、簡単な機械学習モデルしか対応することは出来ませんが、これだけ簡単に機械学習モデルを作成することが出来る!!!ということが、この記事で書きたかったことです。

みなさんもよかったら試してみてください。意外と良い精度のモデル作れますよ。

Discussion