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 を使用
- 正解率を評価
- testset を使用
このコードは手書き数字の画像を認識するためのモデルを学習し、そのモデルが正しく機能するかどうかを評価しています。
正解率が97%という結果が出たのは、テストデータセットに対して98%程度の正解率を達成していたモデルが、若干誤差を生じて正解率が97%となったことを示しています。