PyTorch

Pythonベースのオープンソースの機械学習ライブラリ「PyTorch」の説明です。

PyTorch とは?

PyTorchは、Facebookが開発した、Pythonベースのオープンソースの機械学習ライブラリです。

TensorFlowなどの他の機械学習フレームワークと同様に、ニューラルネットワークの構築やトレーニングを簡単に行うことができます。

PyTorchの特徴の一つは、計算グラフを動的に構築することができることです。

これにより、簡単にモデルを定義することができ、より柔軟なモデルの構築が可能になります。

また、PyTorchはGPUを使用した高速な演算をサポートしており、大規模なデータセットや複雑なモデルのトレーニングも行うことができます。

PyTorchの導入方法

Pythonのパッケージマネージャーpipのコマンドで、PyTorchをインストールすることができます。

pip install torch

PyTorchの使い方については、以下のようなサンプルコードを参考にすることができます。

ここでは、簡単なニューラルネットワークを構築し、手書き数字の画像データセットであるMNISTデータセットを使用してトレーニングする例を示します。

MNISTに関しては、「MNIST」の項目をご覧ください。

import torch
import torch.nn as nn
import torch.optim as optim
from torchvision import datasets, transforms

# ニューラルネットワークの定義
class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(784, 512)
        self.fc2 = nn.Linear(512, 10)

    def forward(self, x):
        x = x.view(-1, 784)
        x = torch.relu(self.fc1(x))
        x = self.fc2(x)
        return x

# データの読み込み
transform = transforms.Compose([transforms.ToTensor(),
                                transforms.Normalize((0.1307,), (0.3081,))])
train_set = datasets.MNIST('../data', train=True, download=True, transform=transform)
test_set = datasets.MNIST('../data', train=False, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=64, shuffle=True)
test_loader = torch.utils.data.DataLoader(test_set, batch_size=1000, shuffle=True)

# モデルのトレーニング
net = Net()
criterion = nn.CrossEntropyLoss()
optimizer = optim.SGD(net.parameters(), lr=0.01, momentum=0.5)

for epoch in range(10):
    for data, target in train_loader:
        optimizer.zero_grad()
        output = net(data)
        loss = criterion(output, target)
        loss.backward()
        optimizer.step()

# テストデータでの評価
correct = 0
total = 0
with torch.no_grad():
    for data, target in test_loader:
        output = net(data)
        _, predicted = torch.max(output.data, 1)
        total += target.size(0)
        correct += (predicted == target).sum().item()

print('Accuracy on test set: %d %%' % (100 * correct / total))

最初に、ニューラルネットワークの定義を行います。ここでは、2つの全結合層を持つシンプルなニューラルネットワークを定義しています。

次に、MNISTデータセットを読み込み、データローダーを定義します。ここでは、64個のデータを1つのバッチとして扱っています。

その後、モデルをトレーニングします。10エポックの間、各バッチのデータを使用してモデルをトレーニングしています。

最後に、テストデータでの評価を行います。テストデータセットを使用して、トレーニングしたモデルの精度を計算しています。

最終的な精度は、"Accuracy on test set"の行で出力されます。(Accuracy = 「正確さ」)

コードの実行結果

実際に上記コードを実行してみた結果、以下のようになりました。

Accuracy on test set: 97 %

正解率が97%という結果がでました。

  • 手書き数字の画像データセット
    • MNISTを使用
  • 学習用のデータセット
    • trainsetを使用
  • 評価用のデータセット
    • testset を使用
      • 正解率を評価

このコードは手書き数字の画像を認識するためのモデルを学習し、そのモデルが正しく機能するかどうかを評価しています。

正解率が97%という結果が出たのは、テストデータセットに対して98%程度の正解率を達成していたモデルが、若干誤差を生じて正解率が97%となったことを示しています。

タイトルとURLをコピーしました