ホームページ >バックエンド開発 >Python チュートリアル >ニューラル ネットワーク トレーニングに PyTorch を使用する方法

ニューラル ネットワーク トレーニングに PyTorch を使用する方法

WBOY
WBOYオリジナル
2023-08-02 17:10:511767ブラウズ

ニューラル ネットワーク トレーニングに PyTorch を使用する方法

はじめに:
PyTorch は、Python をベースにしたオープン ソースの機械学習フレームワークです。その柔軟性とシンプルさにより、多くの研究者やエンジニアが最初に選択します。この記事では、ニューラル ネットワーク トレーニングに PyTorch を使用する方法を紹介し、対応するコード例を示します。

1. PyTorch のインストール
開始する前に、まず PyTorch をインストールする必要があります。公式 Web サイト (https://pytorch.org/) で提供されるインストール ガイドを通じて、オペレーティング システムとインストールするハードウェアに適したバージョンを選択できます。インストールしたら、Python に PyTorch ライブラリをインポートし、コードの記述を開始できます。

2. ニューラル ネットワーク モデルを構築する
PyTorch を使用してニューラル ネットワークをトレーニングする前に、まず適切なモデルを構築する必要があります。 PyTorch には、torch.nn.Module というクラスが用意されており、これを継承して独自のニューラル ネットワーク モデルを定義できます。

以下は、PyTorch を使用して 2 つの完全に接続された層を含むニューラル ネットワーク モデルを構築する方法を示す簡単な例です:

import torch
import torch.nn as nn

class Net(nn.Module):
    def __init__(self):
        super(Net, self).__init__()
        self.fc1 = nn.Linear(in_features=784, out_features=256)
        self.fc2 = nn.Linear(in_features=256, out_features=10)
    
    def forward(self, x):
        x = x.view(x.size(0), -1)
        x = self.fc1(x)
        x = torch.relu(x)
        x = self.fc2(x)
        return x

net = Net()

上記のコードでは、最初に名前を定義します。It is a Netクラスを継承し、torch.nn.Module クラスを継承します。 __init__ メソッドでは、完全に接続された 2 つの層 fc1fc2 を定義します。次に、forward メソッドを使用して、モデル内のデータの前方伝播のプロセスを定義します。最後に、Net のインスタンスを作成します。

3. 損失​​関数とオプティマイザーを定義する
トレーニングの前に、損失関数とオプティマイザーを定義する必要があります。 PyTorch には、特定の状況に応じて選択できる損失関数とオプティマイザーの豊富な選択肢が用意されています。

ここでは、クロスエントロピー損失関数と確率的勾配降下オプティマイザーを使用してトレーニング プロセスを定義する方法を示す例を示します。

loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.SGD(net.parameters(), lr=0.01)

上記のコードでは、クロスエントロピー損失関数を使用します。エントロピー損失関数と確率的勾配降下オプティマイザーは、それぞれ loss_fn 変数と optimizer 変数に割り当てられます。 net.parameters() は、ニューラル ネットワーク モデル内のすべての学習可能なパラメーターを最適化することを示し、lr パラメーターは学習率を示します。

4. データセットを準備する
ニューラル ネットワークをトレーニングする前に、トレーニング データ セットとテスト データ セットを準備する必要があります。 PyTorch は、データ セットのロードと前処理に役立つ実用的なツール クラスをいくつか提供します。

これは、MNIST 手書き数字データセットをロードして前処理する方法を示す例です:

import torchvision
import torchvision.transforms as transforms

transform = transforms.Compose([
    transforms.ToTensor(),
    transforms.Normalize((0.5,), (0.5,)),
])

train_set = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)
train_loader = torch.utils.data.DataLoader(train_set, batch_size=32, shuffle=True)

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

上記のコードでは、最初に transform 変数を使用して、データを前処理します。次に、torchvision.datasets.MNIST クラスを使用して MNIST データセットをロードし、train=True および train=False パラメーター データを使用してトレーニング データセットとテストを指定しました。セット。最後に、torch.utils.data.DataLoader クラスを使用して、データセットを反復可能なデータ ローダーに変換します。

5. トレーニングの開始
データセットを準備したら、ニューラル ネットワークのトレーニングを開始できます。トレーニング ループでは、入力データをモデルに入力し、損失関数を計算し、更新された勾配を逆伝播し、モデルを最適化するという手順を順番に完了する必要があります。

これは、ニューラル ネットワーク トレーニングに PyTorch を使用する方法を示す例です:

for epoch in range(epochs):
    running_loss = 0.0
    for i, data in enumerate(train_loader):
        inputs, labels = data
        
        optimizer.zero_grad()
        
        outputs = net(inputs)
        loss = loss_fn(outputs, labels)
        
        loss.backward()
        optimizer.step()
        
        running_loss += loss.item()
        
        if (i+1) % 100 == 0:
            print('[%d, %5d] loss: %.3f' % (epoch+1, i+1, running_loss/100))
            running_loss = 0.0

上記のコードでは、まず enumerate 関数を使用してトレーニング データの読み込みを繰り返します。プロセッサは、入力データとラベルを取得しました。次に、勾配をゼロにし、入力データをモデルに入力して、予測と損失関数を計算します。次に、backward メソッドを通じて勾配を計算し、step メソッドを通じてモデル パラメーターを更新します。最後に、損失を蓄積し、必要に応じて印刷します。

6. モデルをテストする
トレーニングが完了した後、モデルのパフォーマンスをテストする必要があります。テスト データ セットの精度を計算することで、モデルのパフォーマンスを評価できます。

これは、PyTorch を使用してモデルの精度をテストする方法を示す例です:

correct = 0
total = 0

with torch.no_grad():
    for data in test_loader:
        inputs, labels = data
        outputs = net(inputs)
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum().item()

accuracy = 100 * correct / total
print('Accuracy: %.2f %%' % accuracy)

上記のコードでは、最初に 2 つの変数 correct と # を定義します。 ##total、正しく分類されたサンプルの数とサンプルの総数を計算するために使用されます。次に、torch.no_grad() コンテキスト マネージャーを使用して勾配計算をオフにし、メモリ消費を削減します。その後、予測結果を順次計算し、正しく分類されたサンプル数と総サンプル数を更新します。最後に、正確に分類されたサンプルの数とサンプルの総数に基づいて精度が計算され、印刷されます。

概要:

この記事の導入部を通じて、ニューラル ネットワーク トレーニングに PyTorch を使用する方法の基本的な手順を理解し、ニューラル ネットワーク モデルを構築し、損失関数とオプティマイザーを定義する方法を学びました。データセットを準備し、モデルのトレーニングとテストを開始します。この記事が、ニューラル ネットワークのトレーニングに PyTorch を使用する際の仕事や勉強に役立つことを願っています。

参考資料:

    PyTorch 公式 Web サイト: https://pytorch.org/
  1. PyTorch ドキュメント: https://pytorch.org/docs/stable /インデックス.html

以上がニューラル ネットワーク トレーニングに PyTorch を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。