Convolutional Neural Network (CNN) ist ein Deep-Learning-Modell, das häufig bei Computer-Vision-Aufgaben verwendet wird. Im Vergleich zu vollständig verbundenen neuronalen Netzen verfügt CNN über weniger Parameter und leistungsfähigere Funktionen zur Merkmalsextraktion und eignet sich gut für Aufgaben wie Bildklassifizierung, Zielerkennung und Bildsegmentierung. Im Folgenden stellen wir vor, wie man ein grundlegendes CNN-Modell erstellt.
Convolutional Neural Network (CNN) ist ein Deep-Learning-Modell mit mehreren Faltungsschichten, Pooling-Schichten, Aktivierungsfunktionen und vollständig verbundenen Schichten. Die Faltungsschicht ist die Kernkomponente von CNN und wird zum Extrahieren von Merkmalen des Eingabebildes verwendet. Der Pooling-Layer kann die Größe der Feature-Map reduzieren und die Hauptmerkmale des Bildes beibehalten. Die Aktivierungsfunktion führt eine nichtlineare Transformation ein, um die Ausdrucksfähigkeit des Modells zu erhöhen. Die vollständig verbundene Ebene wandelt die Feature-Map in ein Ausgabeergebnis um. Durch die Kombination dieser Komponenten können wir ein grundlegendes Faltungs-Neuronales Netzwerk aufbauen. CNN eignet sich gut für Aufgaben wie Bildklassifizierung, Zielerkennung und Bilderzeugung und wird häufig im Bereich Computer Vision eingesetzt.
Zweitens müssen für die Struktur von CNN die Parameter jeder Faltungsschicht und Poolschicht bestimmt werden. Zu diesen Parametern gehören die Größe des Faltungskerns, die Anzahl der Faltungskerne und die Größe des Pooling-Kernels. Gleichzeitig ist es auch notwendig, die Dimensionen der Eingabedaten und die Dimensionen der Ausgabedaten zu bestimmen. Die Auswahl dieser Parameter muss in der Regel experimentell ermittelt werden. Ein gängiger Ansatz besteht darin, zunächst ein einfaches CNN-Modell zu erstellen und dann die Parameter schrittweise anzupassen, bis eine optimale Leistung erreicht ist.
Beim Training eines CNN-Modells müssen wir die Verlustfunktion und den Optimierer festlegen. Typischerweise wird häufig die Kreuzentropieverlustfunktion verwendet, während auch der stochastische Gradientenabstiegsoptimierer häufig verwendet wird. Während des Trainingsprozesses geben wir die Trainingsdaten stapelweise in das CNN-Modell ein und berechnen den Verlustwert basierend auf der Verlustfunktion. Verwenden Sie dann den Optimierer, um die Modellparameter zu aktualisieren und den Verlustwert zu reduzieren. Typischerweise sind mehrere Iterationen erforderlich, um das Training abzuschließen, wobei jede Iteration stapelweise Trainingsdaten in das Modell einspeist, bis eine vorgegebene Anzahl von Trainingsepochen erreicht ist oder bestimmte Leistungskriterien erfüllt sind.
Das Folgende ist ein Codebeispiel für den Aufbau eines grundlegenden Convolutional Neural Network (CNN) mit PyTorch:
import torch import torch.nn as nn class Net(nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) # 3个输入通道,6个输出通道,5x5的卷积核 self.pool = nn.MaxPool2d(2, 2) # 2x2的最大池化层 self.conv2 = nn.Conv2d(6, 16, 5) # 6个输入通道,16个输出通道,5x5的卷积核 self.fc1 = nn.Linear(16 * 5 * 5, 120) # 全连接层1,输入大小为16x5x5,输出大小为120 self.fc2 = nn.Linear(120, 84) # 全连接层2,输入大小为120,输出大小为84 self.fc3 = nn.Linear(84, 10) # 全连接层3,输入大小为84,输出大小为10(10个类别) def forward(self, x): x = self.pool(torch.relu(self.conv1(x))) # 第一层卷积+激活函数+池化 x = self.pool(torch.relu(self.conv2(x))) # 第二层卷积+激活函数+池化 x = x.view(-1, 16 * 5 * 5) # 将特征图展开成一维向量 x = torch.relu(self.fc1(x)) # 第一层全连接+激活函数 x = torch.relu(self.fc2(x)) # 第二层全连接+激活函数 x = self.fc3(x) # 第三层全连接 return x
Der obige Code definiert eine Klasse namens Net, die von nn.Module erbt. Diese Klasse enthält Faltungsschichten, Pooling-Schichten und vollständig verbundene Schichten sowie die Vorwärtsmethode, mit der der Vorwärtsausbreitungsprozess des Modells definiert wird. In der __init__-Methode definieren wir zwei Faltungsschichten, drei vollständig verbundene Schichten und eine Pooling-Schicht. Bei der Vorwärtsmethode rufen wir diese Schichten nacheinander auf und verwenden die ReLU-Aktivierungsfunktion, um die Ausgaben der Faltungsschichten und vollständig verbundenen Schichten nichtlinear zu transformieren. Schließlich geben wir die Ausgabe der letzten vollständig verbundenen Schicht als Vorhersage des Modells zurück. Darüber hinaus sollte die Eingabe dieses CNN-Modells ein vierdimensionaler Tensor mit der Form (Batchgröße, Kanäle, Höhe, Breite) sein. Dabei ist „batch_size“ die Stapelgröße der Eingabedaten, „channels“ die Anzahl der Kanäle der Eingabedaten und „height“ und „width“ die Höhe bzw. Breite der Eingabedaten. In diesem Beispiel sollten die Eingabedaten ein RGB-Farbbild mit einer Kanalanzahl von 3 sein.
Das obige ist der detaillierte Inhalt vonGrundlegende Schritte zum Aufbau eines Faltungs-Neuronalen Netzwerks mit PyTorch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!