Heim > Backend-Entwicklung > Python-Tutorial > So verwenden Sie PyTorch für das Training neuronaler Netzwerke

So verwenden Sie PyTorch für das Training neuronaler Netzwerke

WBOY
Freigeben: 2023-08-02 17:10:51
Original
1783 Leute haben es durchsucht

So verwenden Sie PyTorch für das Training neuronaler Netzwerke

Einführung:
PyTorch ist ein Open-Source-Framework für maschinelles Lernen, das auf Python basiert. Seine Flexibilität und Einfachheit machen es zur ersten Wahl vieler Forscher und Ingenieure. In diesem Artikel erfahren Sie, wie Sie PyTorch für das Training neuronaler Netzwerke verwenden, und stellen entsprechende Codebeispiele bereit.

1. PyTorch installieren
Bevor Sie beginnen, müssen Sie zuerst PyTorch installieren. Sie können mithilfe der Installationsanleitung auf der offiziellen Website (https://pytorch.org/) die für Ihr Betriebssystem und Ihre Hardware geeignete Version zur Installation auswählen. Nach der Installation können Sie die PyTorch-Bibliothek in Python importieren und mit dem Schreiben von Code beginnen.

2. Erstellen Sie ein neuronales Netzwerkmodell
Bevor Sie PyTorch zum Trainieren eines neuronalen Netzwerks verwenden, müssen Sie zunächst ein geeignetes Modell erstellen. PyTorch stellt eine Klasse namens torch.nn.Module bereit, die Sie erben können, um Ihr eigenes neuronales Netzwerkmodell zu definieren. torch.nn.Module的类,您可以通过继承该类来定义自己的神经网络模型。

下面是一个简单的例子,展示了如何使用PyTorch构建一个包含两个全连接层的神经网络模型:

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()
Nach dem Login kopieren

在上面的代码中,我们首先定义了一个名为Net的类,并继承了torch.nn.Module类。在__init__方法中,我们定义了两个全连接层fc1fc2。然后,我们通过forward方法定义了数据在模型中前向传播的过程。最后,我们创建了一个Net的实例。

三、定义损失函数和优化器
在进行训练之前,我们需要定义损失函数和优化器。PyTorch提供了丰富的损失函数和优化器的选择,可以根据具体情况进行选择。

下面是一个示例,展示了如何定义一个使用交叉熵损失函数和随机梯度下降优化器的训练过程:

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

在上面的代码中,我们将交叉熵损失函数和随机梯度下降优化器分别赋值给了loss_fnoptimizer变量。net.parameters()表示我们要优化神经网络模型中的所有可学习参数,lr参数表示学习率。

四、准备数据集
在进行神经网络训练之前,我们需要准备好训练数据集和测试数据集。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)
Nach dem Login kopieren

在上面的代码中,我们首先定义了一个transform变量,用于对数据进行预处理。然后,我们使用torchvision.datasets.MNIST类加载MNIST数据集,并使用train=Truetrain=False参数指定了训练数据集和测试数据集。最后,我们使用torch.utils.data.DataLoader类将数据集转换成一个可以迭代的数据加载器。

五、开始训练
准备好数据集后,我们就可以开始进行神经网络的训练。在一个训练循环中,我们需要依次完成以下步骤:将输入数据输入到模型中,计算损失函数,反向传播更新梯度,优化模型。

下面是一个示例,展示了如何使用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
Nach dem Login kopieren

在上面的代码中,我们首先使用enumerate函数遍历了训练数据加载器,得到了输入数据和标签。然后,我们将梯度清零,将输入数据输入到模型中,计算预测结果和损失函数。接着,我们通过backward方法计算梯度,再通过step方法更新模型参数。最后,我们累加损失,并根据需要进行打印。

六、测试模型
训练完成后,我们还需要测试模型的性能。我们可以通过计算模型在测试数据集上的准确率来评估模型的性能。

下面是一个示例,展示了如何使用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)
Nach dem Login kopieren

在上面的代码中,我们首先定义了两个变量correcttotal,用于计算正确分类的样本和总样本数。接着,我们使用torch.no_grad()

Das Folgende ist ein einfaches Beispiel, das zeigt, wie man mit PyTorch ein neuronales Netzwerkmodell mit zwei vollständig verbundenen Schichten erstellt:

rrreee
Im obigen Code definieren wir zunächst eine Klasse mit dem Namen Net und erben von torch.nn. Modul-Klasse. In der Methode __init__ definieren wir zwei vollständig verbundene Schichten fc1 und fc2. Anschließend definieren wir den Prozess der Vorwärtsweitergabe von Daten im Modell über die Methode forward. Schließlich erstellen wir eine Instanz von Net.

3. Definieren Sie die Verlustfunktion und den Optimierer

Vor dem Training müssen wir die Verlustfunktion und den Optimierer definieren. PyTorch bietet eine umfangreiche Auswahl an Verlustfunktionen und Optimierern, die je nach spezifischen Umständen ausgewählt werden können.
  1. Hier ist ein Beispiel, das zeigt, wie ein Trainingsprozess mithilfe der Kreuzentropieverlustfunktion und des stochastischen Gradientenabstiegsoptimierers definiert wird:
  2. rrreee
  3. Im obigen Code weisen wir die Kreuzentropieverlustfunktion und den stochastischen Gradientenabstiegsoptimierer zu Separat werden die Variablen loss_fn und optimizer angegeben. net.parameters() gibt an, dass wir alle lernbaren Parameter im neuronalen Netzwerkmodell optimieren möchten, und der Parameter lr gibt die Lernrate an.
4. Bereiten Sie den Datensatz vor🎜Bevor wir das neuronale Netzwerk trainieren, müssen wir den Trainingsdatensatz und den Testdatensatz vorbereiten. PyTorch bietet einige praktische Toolklassen, die uns beim Laden und Vorverarbeiten von Datensätzen helfen können. 🎜🎜Hier ist ein Beispiel, das zeigt, wie der MNIST-Datensatz handgeschriebener Ziffern geladen und vorverarbeitet wird: 🎜rrreee🎜Im obigen Code definieren wir zunächst eine transform-Variable, um die Datenvorverarbeitung zu transformieren. Anschließend haben wir den MNIST-Datensatz mithilfe der Klasse torchvision.datasets.MNIST geladen und die Trainingsdaten mithilfe der Parameter train=True und train=False angegeben Datensatz festlegen und testen. Schließlich verwenden wir die Klasse torch.utils.data.DataLoader, um den Datensatz in einen iterierbaren Datenlader zu konvertieren. 🎜🎜5. Beginnen Sie mit dem Training🎜Nachdem wir den Datensatz vorbereitet haben, können wir mit dem Training des neuronalen Netzwerks beginnen. In einer Trainingsschleife müssen wir die folgenden Schritte nacheinander ausführen: Eingabedaten in das Modell eingeben, Verlustfunktion berechnen, den aktualisierten Gradienten rückwärts verbreiten und das Modell optimieren. 🎜🎜Hier ist ein Beispiel, das zeigt, wie PyTorch für das Training neuronaler Netzwerke verwendet wird: 🎜rrreee🎜Im obigen Code durchlaufen wir zunächst den Trainingsdatenlader mit der Funktion enumerate, um die Eingabedaten und die Beschriftung zu erhalten. Anschließend setzen wir die Gradienten auf Null, geben die Eingabedaten in das Modell ein und berechnen die Vorhersagen und die Verlustfunktion. Als nächstes berechnen wir den Gradienten mit der Methode backward und aktualisieren dann die Modellparameter mit der Methode step. Schließlich akkumulieren wir die Verluste und drucken sie nach Bedarf aus. 🎜🎜 6. Testen Sie das Modell 🎜Nachdem das Training abgeschlossen ist, müssen wir noch die Leistung des Modells testen. Wir können die Leistung des Modells bewerten, indem wir seine Genauigkeit anhand des Testdatensatzes berechnen. 🎜🎜Hier ist ein Beispiel, das zeigt, wie man die Genauigkeit eines Modells mit PyTorch testet: 🎜rrreee🎜Im obigen Code definieren wir zunächst zwei Variablen correct und total, used um die Anzahl der korrekt klassifizierten Proben und die Gesamtzahl der Proben zu berechnen. Als Nächstes verwenden wir den Kontextmanager torch.no_grad(), um Gradientenberechnungen zu deaktivieren und so den Speicherverbrauch zu reduzieren. Anschließend berechnen wir nacheinander die Vorhersageergebnisse, aktualisieren die Anzahl der korrekt klassifizierten Stichproben und die Gesamtzahl der Stichproben. Abschließend wird die Genauigkeit anhand der Anzahl der korrekt klassifizierten Proben und der Gesamtzahl der gedruckten Proben berechnet. 🎜🎜Zusammenfassung: 🎜Durch die Einleitung dieses Artikels haben Sie die grundlegenden Schritte zur Verwendung von PyTorch für das Training neuronaler Netzwerke verstanden und gelernt, wie Sie ein neuronales Netzwerkmodell erstellen, Verlustfunktionen und Optimierer definieren, Datensätze vorbereiten und mit dem Training beginnen und Testen des Modells. Ich hoffe, dieser Artikel kann Ihnen bei Ihrer Arbeit und Ihrem Studium zur Verwendung von PyTorch für das Training neuronaler Netze hilfreich sein. 🎜🎜Referenzen: 🎜🎜🎜Offizielle PyTorch-Website: https://pytorch.org/🎜🎜PyTorch-Dokumentation: https://pytorch.org/docs/stable/index.html🎜🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie PyTorch für das Training neuronaler Netzwerke. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage