LoginSignup
0
0

WinPythonをダウンロードして展開すればそのままPyTorchが使える状態になっている

Posted at

はじめに

WinPythonを使用すると、PyTorchをすぐに始めることが出来るようになっていました。

WinPythonには、既定でPyTorchがインストール済みになっており、WinPythonをダウンロードして展開すればそのままPyTorchが使える状態になっています。

WinPythonでPyTorchを使い始める

WinPythonは下記のサイトからダウンロード可能です。

リンクを辿ってsourceforge.netにアクセスします。
2024年5月現在では、下記が最新の安定版となっており、Winpython64-3.12.3.0.exeをダウンロード。

image.png

Winpython64-3.12.3.0.exeは、単に7zipのアーカイブファイルで、実行すると展開されます。(インストール等は不要、展開されたフォルダを配置するのみでOK、ポータブルなので扱いやすい)

下記のようにファイルが展開され、Jupyter Lab.exeを実行すると、Jupyter Notebookがブラウザ上で開きます。

image.png

image.png

新しいNotebookを作成し、PyTorchを利用する際に必要となる2個のライブラリ「torch」「torchvision」のバージョンを、下記のコードで確認してみます。

!pip show torch
!pip show torchvision

image.png

すると、バージョン情報が正しく表示されて、WinPythonに既定でPyTorchがインストール済みになっており、WinPythonをダウンロードして展開すればそのままPyTorchが使える状態になっています。

PyTorchのライブラリをimportして、バージョン情報を表示させると、正しく表示され、ライブラリが読み込まれていることが分かります。

import torch
import torchvision
torch.__version__
torchvision.__version__

image.png

生成AIが作成した機械学習のサンプルコードを試す

このまま続けて、次に、生成AIに機械学習のサンプルコードを聞いて、実際に実行してみます。(MNIST 28x28の手書き数字を分類するタスクで試行)

今回は、Perplexity AIの生成AIを使用してみました。

質問結果全体:
https://www.perplexity.ai/search/PyTorchMNIST-28x28-zb_dQC_pQ6aL6vI5k.v_jA

私(人間)
PyTorch、MNIST 28x28のサンプルコード、精度の表示

Perplexity AI(自動生成)
PyTorchを使ってMNISTデータセットの28x28ピクセルの手書き数字を認識するサンプルコードと、モデルの精度を表示する方法は以下の通りです。

import torch
import torchvision
import torchvision.transforms as transforms

# MNISTデータセットを読み込む
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(), download=True)
test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor())

# データローダーを作成
train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(dataset=test_dataset, batch_size=64, shuffle=False)

# ニューラルネットワークモデルを定義
class Net(torch.nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.conv1 = torch.nn.Conv2d(1, 10, kernel_size=5)
        self.conv2 = torch.nn.Conv2d(10, 20, kernel_size=5)
        self.fc1 = torch.nn.Linear(320, 50)
        self.fc2 = torch.nn.Linear(50, 10)

    def forward(self, x):
        x = torch.nn.functional.relu(torch.nn.functional.max_pool2d(self.conv1(x), 2))
        x = torch.nn.functional.relu(torch.nn.functional.max_pool2d(self.conv2(x), 2))
        x = x.view(-1, 320)
        x = torch.nn.functional.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# モデルのインスタンス化と損失関数、最適化手法の設定
model = Net()
criterion = torch.nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01, momentum=0.5)

# モデルの学習
num_epochs = 3
for epoch in range(num_epochs):
    for i, (images, labels) in enumerate(train_loader):
        optimizer.zero_grad()
        outputs = model(images)
        loss = criterion(outputs, labels)
        loss.backward()
        optimizer.step()

# モデルの評価と精度の表示        
correct = 0
total = 0
with torch.no_grad():
    for images, labels in test_loader:
        outputs = model(images)
        _, predicted = torch.max(outputs, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

print(f'Accuracy: {100 * correct / total}%') # 精度を表示

このコードでは、MNISTデータセットからトレーニングデータとテストデータを読み込み、簡単なConvNetモデルを定義しています。その後、トレーニングデータを使ってモデルを学習させ、最後にテストデータを使ってモデルの精度を評価し、精度をパーセンテージで出力しています。[1][2][3][4][5]

Citations:
[1] https://stackoverflow.com/questions/73177931/mnist-model-performing-very-badly-on-custom-data
[2] https://blog.paperspace.com/training-validation-and-accuracy-in-pytorch/
[3] https://visualstudiomagazine.com/Articles/2022/02/15/convolutional-neural-networks.aspx
[4] https://pytorch.org/tutorials/intermediate/tensorboard_tutorial.html
[5] https://nextjournal.com/gkoehler/pytorch-mnist

外観:
image.png

実行結果

実行の結果、エラーなく一発で動作し、精度は「97.15%」と表示されました。妥当な結果になりました。

image.png

単に、生成AIにサンプルコードをラフに(何となく)聞いて、コピー&ペーストすれば、一発で動作するコードが得られました。

まとめ

機械学習が非常に始めやすくなっていることが分かりました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0