
Was ist ein Faltungsneuronales Netz? Ein Leitfaden für Ingenieure
Ein Convolutional Neural Network (CNN) ist ein Deep-Learning-Modell, das auf visuelle Daten wie Bilder, Videos und manchmal sogar Audiodateien zugeschnitten ist.
CNNs haben Bereiche wie Computer Vision, Bildanalyse und -verarbeitung](https://www.v7labs.com/blog/image-processing-guide), Objekterkennung und sogar Verarbeitung natürlicher Sprache (NLP) verändert.
Herkömmliche neuronale Netze wie MLP (Multi-Layer Perceptron) oder Fully Connected Networks behandeln Bilddaten als flache Vektoren, was beim Umgang mit den in visuellen Daten vorhandenen räumlichen Informationen einschränkend sein kann. Dies kann aufgrund falscher Annahmen (induktive Verzerrung) zu schlechter Genauigkeit führen.
CNNs gehen diese Probleme an, indem sie die Bildstruktur, wie z. B. die lokale Konnektivität und den Inhalt der Pixel der Bilddaten, beibehalten, wodurch sie bei der Mustererkennung effizient sind.
In diesem Beitrag werden die Vorteile von CNNs hervorgehoben, ihre Architektur erklärt und ein einfaches Beispiel für den Entwurf eines CNN-Modells gegeben.
Schlüsselgründe für die Verwendung eines CNN
CNNs zeichnen sich dadurch aus, dass sie aussagekräftige Merkmale aus visuellen Rohdaten extrahieren und damit traditionelle neuronale Netze übertreffen. Gründe für die Verwendung eines CNN sind unter anderem:
Gemeinsame Nutzung von Parametern - Ein CNN nutzt denselben Parametersatz für verschiedene Bereiche der Eingabe, was bei der effizienten Identifizierung verborgener Muster in hochdimensionalen Daten hilfreich ist.
Reduzierte Anzahl von Parametern - CNNs verwenden die Technik des Pooling und der Faltung, wodurch die Anzahl der Parameter im Vergleich zu vollständig verbundenen Netzen erheblich reduziert wird.
Hierarchisches Merkmalslernen - Ein CNN ahmt die hierarchische Struktur des menschlichen Sehsystems nach.
Moderne Leistung - CNNs übertreffen durchweg traditionelle neuronale Netze bei Aufgaben wie Objekterkennung, Bildverarbeitung, Spracherkennung und Bildsegmentierung. Beachten Sie, dass die jüngsten Fortschritte im Bereich der Computer Vision auch konvolutionäre und nichtkonvolutionäre Transformatoren eingeführt haben.
Convolutional Neural Network - Vorteile und Nachteile
CNNs haben die Computer-Vision-Branche verändert, aber wir müssen sowohl die Vor- als auch die Nachteile kennen. Schauen wir uns nun die Vor- und Nachteile von CNNs an:
Convolutional Neural Network Vorteile:
- Erkennung von Mustern und Merkmalen: CNNs sind hervorragend in der Lage, Muster und Merkmale in Bildern, Videos und Audiosignalen zu erkennen. Ihre hierarchische Struktur ermöglicht es ihnen, komplexe Merkmale aus Rohdaten zu lernen.
- Unveränderlichkeit gegenüber Transformationen: CNNs sind translations-, drehungs- und skalierungsinvariant. Das bedeutet, dass sie Objekte auch dann erkennen können, wenn sie sich in unterschiedlichen Positionen, Ausrichtungen oder Größen in einem Bild befinden.
- Automatische Merkmalsextraktion: CNNs ermöglichen ein durchgängiges Training, ohne dass eine manuelle Merkmalsextraktion erforderlich ist. Das Netzwerk lernt, relevante Merkmale direkt aus den rohen Eingabedaten zu finden.
- Skalierbarkeit und Genauigkeit: CNNs können große Datenmengen verarbeiten und sind bei komplexen Aufgabenstellungen genau. Mit zunehmender Datenmenge verbessert sich in der Regel auch ihre Leistung.
Convolutional Neural Network Nachteile:
Berechnungsaufwand: Das Training von CNNs ist rechenintensiv und erfordert viel Speicherplatz. Dies kann eine Herausforderung für die Implementierung ohne spezielle Hardware wie GPUs sein.
Überanpassung: Wenn nicht genügend Daten oder geeignete [Regularisierungstechniken] (https://zilliz.com/learn/understanding-regularization-in-nueral-networks) zur Verfügung stehen, können CNNs überanpassen. Das bedeutet, dass sie bei Trainingsdaten gute Leistungen erbringen, aber bei der Generalisierung auf neue, unbekannte Daten versagen.
Datenanforderungen: CNNs benötigen große Mengen an markierten Daten für das Training. In Bereichen, in denen beschriftete Daten knapp oder teuer zu beschaffen sind, kann dies eine große Einschränkung darstellen.
Interpretierbarkeit: Es ist schwer zu interpretieren, was ein CNN gelernt hat. Die "Blackbox"-Natur von Deep-Learning-Modellen macht es schwierig, die Gründe für ihre Vorhersagen zu verstehen, was bei sensiblen Anwendungen ein Problem darstellen kann.
Das Verständnis dieser Vor- und Nachteile ist von entscheidender Bedeutung, wenn es darum geht, zu entscheiden, ob CNNs für eine bestimmte Aufgabe eingesetzt werden sollen, und wenn CNN-basierte Lösungen entworfen und implementiert werden.
Gängige Regularisierungstechniken in CNNs
Wie bereits bei den Nachteilen erwähnt, neigen CNNs zur Überanpassung, insbesondere wenn sie mit begrenzten Daten arbeiten. Regularisierungstechniken werden verwendet, um zu verhindern, dass CNNs die Trainingsdaten übermäßig anpassen, so dass das Modell besser auf ungesehene Daten verallgemeinert werden kann. Hier sind einige gängige Regularisierungstechniken, die in CNNs verwendet werden:
Ausscheiden: Bei dieser Technik werden einige Ausgangsmerkmale der Schicht während des Trainings nach dem Zufallsprinzip "herausgenommen" (d. h. auf Null gesetzt). Dropout zwingt das Netz, robustere Merkmale zu lernen, die nicht von einem einzelnen Neuron abhängig sind. Dadurch wird das Netz weniger empfindlich gegenüber den spezifischen Gewichten der Neuronen, was wiederum zu einer besseren Generalisierung führt. Beim Testen werden alle Neuronen verwendet, aber ihre Ausgänge werden herunterskaliert, um die fehlenden Neuronen während des Trainings zu kompensieren.
L1-Regularisierung: Die L1-Regularisierung, auch Lasso-Regularisierung genannt, fügt der Verlustfunktion einen Strafterm hinzu, der proportional zum Absolutwert der Gewichte ist. Diese Technik fördert die Sparsamkeit des Modells, indem einige Gewichte auf Null gesetzt werden. Die L1-Regularisierung ist nützlich, wenn Sie ein einfacheres Modell erstellen möchten, indem Sie weniger wichtige Merkmale entfernen.
L2-Regularisierung: Die auch als Ridge-Regularisierung bezeichnete L2-Regularisierung fügt der Verlustfunktion einen Strafterm hinzu, der proportional zum Quadrat der Gewichte ist. Diese Technik verhindert große Gewichte und sorgt für eine gleichmäßigere Verteilung der Gewichtungswerte. Die L2-Regularisierung führt nicht zu spärlichen Modellen wie L1, kann aber helfen, die Auswirkungen weniger relevanter Merkmale zu verringern.
Sowohl L1 als auch L2 können die Anzahl der Gewichte reduzieren und das Netz effizienter machen. Die Wahl zwischen L1 und L2 (oder einer Kombination aus beiden, bekannt als Elastic Net Regularization) hängt von der Problemstellung und dem Datensatz ab.
Diese Regularisierungstechniken lösen, wenn sie richtig eingesetzt werden, eines der größten Probleme beim Deep Learning und beim maschinellen Lernen.
CNN-Architektur und ihre Funktionsweise
Ein CNN verfügt über große Fähigkeiten, die es diesen Netzwerken ermöglichen, versteckte Muster zu finden und visuelle Daten mit außergewöhnlicher Genauigkeit zu entschlüsseln.
Das menschliche neuronale System hat mehrere Schichten, von denen jede für eine bestimmte Funktion zuständig ist. CNNs haben eine ähnliche Architektur, wobei jede Schicht unterschiedliche Merkmale aus dem Eingangsbild extrahiert. Nachstehend finden Sie eine ausführliche Erläuterung aller an der CNN-Architektur beteiligten Schichten.
Die ersten Schichten sind Faltungsschichten, die für die Extraktion der grundlegenden Merkmale des Bildes wie Kanten und Form verantwortlich sind.
Die nächsten Schichten sind Pooling-Schichten, die als Ausgabeschicht für die Verkleinerung der [Merkmalskarten] zuständig sind (https://www.baeldung.com/cs/cnn-feature-map).
Die letzte Schicht ist die voll verknüpfte Schicht, die für die Klassifizierung des Bildes in eine der vorgegebenen Kategorien zuständig ist.
Fast alle modernen, reinen Faltungsarchitekturen haben nur eine globale Pooling-Schicht am Ende, gefolgt von einer vollverknüpften Schicht.
Faltungsschicht
Die Faltungsschicht ist das Herzstück eines CNN, das dazu dient, charakteristische Muster in den Eingabedaten zu finden. Sie nimmt das Eingangsbild und wendet eine Reihe von Filtern an, um eine Ausgabe zu erzeugen, die als Merkmalskarte bezeichnet wird. Bei den Filtern handelt es sich um kleine Matrizen mit Gewichten, die das Eingangsbild abtasten, um verschiedene Muster zu erkennen. Wenn sich der Filter über das Bild bewegt, geschieht dies in Schritten, die durch die Schrittweite definiert sind - die Anzahl der Pixel, die der Filter in jedem Schritt bewegt. Manchmal werden Auffüllungen verwendet, um die Größe der Ausgabe zu kontrollieren, indem zusätzliche Pixel um die Eingabe herum hinzugefügt werden. Es gibt verschiedene Arten von Auffüllungen, darunter gültige Auffüllungen, Null-Auffüllungen (keine Auffüllungen), gleiche Auffüllungen (Ausgabegröße entspricht der Eingabegröße) und vollständige Auffüllungen (die die Ausgabegröße erhöhen). Nach der Faltungsoperation wird eine nichtlineare Aktivierungsfunktion, in der Regel ReLU (Rectified Linear Unit), angewendet, um Nichtlinearität in das Modell einzuführen.
Weitere Faltungsschichten
Wie bereits erwähnt, kann nach der ersten Faltungsschicht eine weitere Faltungsschicht folgen. In diesem Fall wird das CNN hierarchisch, da die späteren Schichten die Pixel innerhalb der rezeptiven Felder der vorherigen Schichten sehen können. Diese hierarchische Struktur ermöglicht es den verborgenen Schichten im Netzwerk, komplexere Merkmale zu lernen, während die Daten durch die Schichten fließen.
Nehmen wir an, wir wollen ein menschliches Gesicht in einem Bild erkennen. Man kann sich ein Gesicht als eine Komposition verschiedener Merkmale vorstellen. Es besteht aus Augen, Nase, Mund, Augenbrauen und so weiter. Jedes einzelne Merkmal des Gesichts ist ein Muster einer niedrigeren Ebene im neuronalen Netz, und die Kombination dieser Merkmale ist ein Muster einer höheren Ebene, eine Merkmalshierarchie im visuellen Kortex des CNN.
In der ersten Faltungsschicht könnte das Netz lernen, einfache Merkmale wie Kanten, Kurven und Grundformen zu erkennen. Dabei kann es sich um die Umrisse von Gesichtszügen oder den Kontrast zwischen verschiedenen Teilen des Gesichts handeln.
Die zweite Schicht der Bildklassifizierung könnte diese grundlegenden Merkmale kombinieren, um komplexere Formen zu erkennen. Zum Beispiel könnte sie kreisförmige Formen (möglicherweise Augen) oder geschwungene Linien (vielleicht die Umrisse des Mundes oder der Augenbrauen) erkennen.
In den nachfolgenden Schichten könnte das Netz damit beginnen, ganze Gesichtszüge zu erkennen, indem es die Muster aus den vorherigen Schichten kombiniert. Ein Neuron könnte feuern, wenn es eine augenähnliche Struktur erkennt, ein anderes, wenn es ein nasenähnliches Muster erkennt.
In den letzten Schichten würde das CNN all diese Gesichtsmerkmale kombinieren, um ein vollständiges Gesicht zu erkennen. In diesem Stadium erkennt das Netzwerk nicht nur einzelne Merkmale, sondern versteht auch, wie diese Merkmale im Kontext eines Gesichts zueinander stehen.
Schließlich würden die Faltungsschichten das Bild in numerische Werte umwandeln, so dass das neuronale Netz die Eingabebilder interpretieren und Muster auf verschiedenen Abstraktionsebenen extrahieren kann. Dieses hierarchische Lernen von Merkmalen ist eine der Hauptstärken von CNNs bei Bilderkennungsaufgaben, um komplexe Multikomponentenobjekte wie Gesichter zu verstehen.
Pooling-Schicht
Im Anschluss an die Faltungsschicht findet man häufig eine Pooling-Schicht. Der Zweck dieser Pooling-Schicht besteht darin, die Größe der Merkmalskarten zu reduzieren und gleichzeitig die wichtigsten Merkmale zu erhalten. Dies trägt dazu bei, die Rechenkomplexität zu verringern und die Überanpassung zu kontrollieren. Es gibt zwei gängige Pooling-Techniken: das Max-Pooling, bei dem der Maximalwert aus einem kleinen Bereich der Merkmalskarte genommen wird, und das Average-Pooling, bei dem der Durchschnittswert aus einem kleinen Bereich genommen wird.
Fully connected (FC) layer
Die letzte Schicht eines CNN ist in der Regel eine voll verknüpfte Schicht, die die Ausgabe des CNN klassifiziert. Diese Schicht ist ähnlich wie eine herkömmliche Schicht eines neuronalen Netzes und verbindet sich mit allen Neuronen der vorherigen Schicht. Sie verwendet die von den Faltungsschichten gelernten High-Level-Merkmale, um die endgültige Klassifizierungs- oder Regressionsaufgabe durchzuführen.
Die Architektur von neuronalen Faltungsnetzen.png](https://assets.zilliz.com/The_Architecture_of_Convolutional_Neural_Networks_8263469ad1.png)
Wesentliche Terminologie
Bei der Arbeit mit CNNs ist es wichtig, einige grundlegende Begriffe zu verstehen. Eine Epoche bezieht sich auf einen vollständigen Durchlauf durch den gesamten Trainingsdatensatz. Dropout ist eine Technik, mit der eine Überanpassung verhindert wird, indem Neuronen während des Trainings nach dem Zufallsprinzip fallen gelassen werden. Stochastic Depth ist eine weitere Methode, bei der das Netzwerk während des Trainings durch das zufällige Weglassen von Restblöcken verkürzt wird.
Strides - Dies ist die Schrittgröße, die der Filter während der Faltung einnimmt.
Padding-Padding in CNN ist das Hinzufügen von Nullen an den Rändern des Bildes, um seine räumliche Dimension nach der Faltung zu erhalten. Dies geschieht, um zu verhindern, dass das Bild schrumpft und nach jeder Faltung Informationen verloren gehen.
Epoche - Ein vollständiger Durchlauf durch den gesamten Trainingsdatensatz.
Dropout (Regularisierung)-Technik zur Vermeidung von Overfitting durch zufälliges Fallenlassen von Neuronen während des Trainings, wodurch das Netzwerk gezwungen wird, zu lernen, anstatt sich auf mehr Neuronen zu verlassen.
Stochastische Tiefe - Verkürzt das Netzwerk während des Trainings, indem die restlichen Blöcke zufällig weggelassen und ihre Transformationen durch Überspringen von Verbindungen umgangen werden. Währenddessen wird beim Testen das gesamte Netzwerk verwendet, um Vorhersagen zu treffen. Dies führt zu einer Verbesserung des Testfehlers und einer erheblichen Verkürzung der Trainingszeit.
Arten von Faltungsneuronalen Netzen
Die Geschichte und Entwicklung von Faltungsneuronalen Netzen reicht mehrere Jahrzehnte zurück, und viele Forscher haben dazu beigetragen. Das Verständnis dieser Geschichte wird Ihnen helfen, den aktuellen Stand der CNNs zu verstehen.
Historische Grundlage
Kunihiko Fukushima legte 1980 mit seiner Arbeit am "Neocognitron", einem hierarchischen, mehrschichtigen künstlichen neuronalen Netz, den Grundstein für CNNs. Dieses frühe Modell konnte eine robuste visuelle Mustererkennung erlernen.
Einen weiteren wichtigen Beitrag leistete Yann LeCun 1989 mit seiner Arbeit "Backpropagation Applied to Handwritten Zip Code Recognition". LeCun wandte Backpropagation an, um neuronale Netze zur Erkennung von Mustern in handgeschriebenen Postleitzahlen zu trainieren. Dies war ein großer Schritt in Richtung praktischer Anwendungen von neuronalen Netzen.
LeNet-5: Die ursprüngliche CNN-Architektur
LeCun und sein Team arbeiteten in den 1990er Jahren weiter daran und stellten schließlich 1998 LeNet-5 vor. LeNet-5 wendet die Prinzipien früherer Arbeiten auf die Dokumenterkennung an. Es gilt als die ursprüngliche CNN-Architektur und bildet die Grundlage für alle weiteren Arbeiten.
Entwicklung von CNN-Architekturen
Seit LeNet-5 wurden viele Varianten von CNN-Architekturen entwickelt. Neue Datensätze wie MNIST und CIFAR-10 und Wettbewerbe wie ImageNet Large Scale Visual Recognition Challenge (ILSVRC) haben die meisten dieser Innovationen hervorgebracht. Einige der bemerkenswerten CNN-Architekturen, die entwickelt wurden, sind:
AlexNet: Entwickelt von Alex Krizhevsky, Ilya Sutskever und Geoffrey Hinton, gewann AlexNet die ILSVRC 2012. Es war tiefer und breiter als frühere CNNs, verwendete ReLU-Aktivierungen und Dropout zur Regularisierung.
VGGNet: Entwickelt von der Visual Geometry Group in Oxford, ist VGGNet für seine Einfachheit und Tiefe bekannt. Es verwendet kleine 3x3-Faltungsfilter im gesamten Netzwerk.
GoogLeNet (Inception): Das von Google entwickelte Modul "Inception" ermöglicht effizientere Berechnungen und tiefere Netze.
ResNet: Entwickelt von Microsoft Research, führte ResNet "Skip Connections" ein und ermöglichte das Training von viel tieferen Netzen (bis zu 152 Schichten in der Originalarbeit).
ZFNet: ZFNet (benannt nach seinen Schöpfern Zeiler und Fergus) ist eine Verbesserung von AlexNet und gewann den ILSVRC 2013 durch die Optimierung der Hyperparameter der Architektur.
Jede dieser Architekturen brachte Innovationen hervor, die die Grenzen dessen, was mit CNNs möglich war, verschoben und die Leistung bei verschiedenen Computer-Vision-Aufgaben verbessert haben.
Wie entwirft man ein neuronales Faltungsnetzwerk
Beim Entwurf eines CNN sind mehrere wichtige Entscheidungen zu treffen. Dazu gehören die Wahl der Eingabegröße, die Bestimmung der Anzahl der Faltungsschichten, die Wahl der Größe und Anzahl der Filter pro Eingabeschicht, die Wahl der Pooling-Methode, die Entscheidung über die Anzahl der vollständig verbundenen Schichten und die Wahl der Aktivierungsfunktionen. Jede dieser Entscheidungen kann sich erheblich auf die Leistung und Effizienz des Netzes auswirken.
Wählen Sie die Eingabegröße - Die Eingabegröße gibt die Größe des Bildes an, auf dem das CNN trainiert wird. Die Eingabegröße sollte groß genug sein, damit das Netzwerk in der Lage ist, die Merkmale eines Objekts, das es klassifizieren soll, zu extrahieren.
Wählen Sie die Anzahl der Faltungsschichten-Dies bestimmt, wie viele Merkmale das Netz lernen kann. Je mehr Faltungsschichten, desto komplexere Merkmale kann es lernen, aber desto länger dauert die Berechnung.
Wählen Sie die Größe des Filters-Die Größe des Filters bestimmt zusammen mit der Schrittweite der Faltung die Größe der Merkmale, die aus den Bildern extrahiert werden. Ein Filter größerer Dimensionen extrahiert eine größere Anzahl von Merkmalen.
Wählen Sie die Anzahl der Filter pro Schicht - Dies bestimmt die Anzahl der verschiedenen Merkmale, die aus einem Bild extrahiert werden können.
Wählen Sie die Pooling-Methode-Die beiden gängigen Pooling-Techniken sind Max-Pooling und Average-Pooling. Beim Max-Pooling wird der maximale Wert aus einem kleinen Bereich der Merkmalskarte genommen, während beim Average-Pooling der Durchschnittswert aus einem kleinen Bereich der Merkmalskarte genommen wird.
Wählen Sie die Anzahl der vollständig verknüpften Schichten - Dies bestimmt die Anzahl der Klassen, die das Netz klassifizieren kann.
Wählen Sie die Aktivierungsfunktion-Die [Aktivierungsfunktion] (https://zilliz.com/learn/class-activation-mapping-CAM) ermöglicht das Lernen komplexerer Muster aus dem Bilddatensatz. Für die binäre Klassifizierung wird normalerweise die Sigmoidfunktion verwendet. Bei einem Mehrklassen-Klassifikationsproblem verwendet die FC-Schicht die Softmax-Aktivierungsfunktion. Um die Nichtlinearität in Daten einzuführen, werden heutzutage meist die GeLU oder Swish Aktivierungsfunktionen verwendet.
Im Folgenden finden Sie ein einfaches Beispiel für eine CNN-Implementierung mit Python, die Verkehrsschilder klassifiziert. Sie finden den Datensatz auf der Kaggle-Website.
Einfache CNN-Implementierung mit PyTorch
Um ein CNN-Modell in Python zu implementieren, verwenden Sie Frameworks wie PyTorch, TensorFlow, Keras, etc. Diese Frameworks bieten die Implementierung aller für ein CNN erforderlichen Schichten.
Der Prozess beginnt mit dem Importieren der erforderlichen Module wie folgt:
# Abhängigkeiten für Berechnungen
importiere pandas als pd
importiere numpy als np
# Abhängigkeiten für das Lesen und Anzeigen von Bildern
von cv2 importieren resize
von skimage.io importieren imread
import matplotlib.pyplot as plt
%matplotlib inline
# Abhängigkeit zur Erstellung des Validierungssatzes
from sklearn.model_selection import train_test_split
# Abhängigkeit für die Auswertung des Modells
from sklearn.metrics import accuracy_score
from tqdm import tqdm
# PyTorch-Bibliotheken und -Module
torch importieren
aus torch.autograd importieren Variable
von torch.nn importieren (Linear, ReLU, CrossEntropyLoss,
Sequentiell, Conv2d, MaxPool2d, Modul,
Softmax, BatchNorm2d, Dropout)
aus torch.optim import Adam, SGD
Danach laden Sie den Datensatz und die Bilder mit dem folgenden Code:
# Laden des Datensatzes
train = pd.read_csv('Data/train.csv')
# Laden der Trainingsbilder
train_img = []
for img_name in tqdm(train['Path']):
# Definition des Bildpfades
image_path = 'Daten/' + str(img_name)
# Lesen des Bildes
img = imread(image_path, as_gray=True)
# Größe des Bildes ändern
img = resize(img, (28, 28))
# Normalisierung der Pixelwerte
img /= 255.0
# Konvertierung des Pixeltyps in float 32
img = img.astype('float32')
# Einfügen des Bildes in die Liste
train_img.append(img)
# Konvertierung der Liste in ein Numpy-Array
train_x = np.array(train_img)
# Definition des Ziels
train_y = train['ClassId'].values
train_x.shape
Sobald die Trainingsdaten geladen sind, müssen Sie mit der Methode train_test_split() von sklearn einen Trainings- und Validierungsdatensatz erstellen.
# Validierungssatz erstellen
train_x, val_x, train_y, val_y = train_test_split(train_x, train_y, test_size = 0.1)
# Überprüfen Sie die Formen der Trainings- und Validierungssätze.
(train_x.shape, train_y.shape), (val_x.shape, val_y.shape)
Außerdem müssen Sie die Daten für das Torch-Modell wie folgt umgestalten:
# Konvertierung der Trainingsbilder in das Torch-Format
train_x = train_x.reshape(-1, 1, 28, 28)
train_x = torch.from_numpy(train_x)
# Konvertierung des Ziels in das Torch-Format
train_y = train_y.astype(int);
train_y = torch.from_numpy(train_y)
# Konvertierung der Validierungsbilder in das Torch-Format
val_x = val_x.reshape(-1, 1, 28, 28)
val_x = torch.from_numpy(val_x)
# Konvertierung des Ziels in das Torch-Format
val_y = val_y.astype(int);
val_y = torch.from_numpy(val_y)
Definieren Sie dann verschiedene Schichten eines CNN wie folgt:
class Net(Module):
def __init__(self):
super(Net, self).__init__()
self.cnn_layers = Sequential(
# Definieren einer 2D-Faltungsschicht
Conv2d(1, 4, kernel_size=3, stride=1, padding=1),
BatchNorm2d(4),
ReLU(inplace=True),
MaxPool2d(kernel_size=2, stride=2),
# Definieren einer weiteren 2D-Faltungsschicht
Conv2d(4, 4, kernel_size=3, stride=1, padding=1),
BatchNorm2d(4),
ReLU(inplace=True),
MaxPool2d(kernel_size=2, stride=2),
)
# letzte dichte Schicht für die Vorhersage
self.linear_layers = Sequential(
Linear(4 * 7 * 7, 43)
)
# Definieren des Vorwärtsdurchlaufs
def forward(self, x):
x = self.cnn_layers(x)
x = x.view(x.size(0), -1)
x = self.linear_layers(x)
return x
Das obige CNN-Netz besteht aus zwei Faltungsschichten, gefolgt von einer Maximum-Pooling-Schicht mit einer räumlichen Dimension von 2 x 2.
Eine Abflachungsschicht kann dabei helfen, die versteckten Schichten im Bild des Zeichens in entsprechende Klassen zu klassifizieren.
Als Nächstes entscheiden wir uns für den Optimierer und die Verlustfunktion und definieren das Trainingsverfahren.
# Definieren des Modells
model = Net()
# Definieren des Optimierers
Optimierer = Adam(model.parameters(), lr=0.07)
# Definieren der Verlustfunktion
Kriterium = CrossEntropyLoss()
# Prüfen, ob eine GPU verfügbar ist
if torch.cuda.is_available():
model = model.cuda()
kriterium = kriterium.cuda()
print(model)
def train(epoch):
model.train()
tr_loss = 0
# Erhalten der Trainingsmenge
x_train, y_train = Variable(train_x), Variable(train_y)
# Ermitteln des Validierungssatzes
x_val, y_val = Variable(val_x), Variable(val_y)
# Konvertierung der Daten in das GPU-Format
if torch.cuda.is_available():
x_train = x_train.cuda()
y_train = y_train.cuda()
x_val = x_val.cuda()
y_val = y_val.cuda()
# Gradienten der Modellparameter löschen
optimizer.zero_grad()
# Vorhersage für Trainings- und Validierungsmenge
output_train = model(x_train)
ausgabe_wert = model(x_wert)
# Berechnen des Verlusts für Training und Validierung
loss_train = criterion(output_train, y_train)
verlust_wert = kriterium(ausgabe_wert, y_wert)
train_losses.append(verlust_train)
val_losses.append(loss_val)
# Backpropagation und Aktualisierung der Modellparameter
loss_train.backward()
optimizer.step()
tr_loss = loss_train.item()
if epoch%2 == 0:
# Drucken des Validierungsverlusts
print('Epoche : ',epoche+1, '\t', 'verlust :', verlust_val)
Schließlich trainieren Sie das Modell für 25 Epochen auf den Trainingsdaten wie folgt:
# Definieren der Anzahl der Epochen
n_epochs = 25
# leere Liste zum Speichern der Trainingsverluste
train_losses = []
# leere Liste zum Speichern der Validierungsverluste
val_losses = []
# Training des Modells
for epoch in range(n_epochs):
train(epoch)
Am Ende wird jedes Modell dazu da sein, Vorhersagen für die Testdaten zu treffen. Weitere Einzelheiten finden Sie in diesem Blog unter how to write CNNs from Scratch in PyTorch.
FAQs
Was ist der Unterschied zwischen CNN und Deep Neural Networks?
Ein CNN ist eine Art von neuronalem Netzwerk, das visuelle Daten wie Bilder, Sprache, Videos usw. verarbeiten kann, während Deep Neural Networks (DNNs) eine Art von künstlichem neuronalem Netzwerk sind, das komplexe Muster aus Daten lernen kann.
Im Folgenden werden die Hauptunterschiede zwischen CNNs und DNNs erläutert.
Ein CNN hat eine spezielle Architektur für die Verarbeitung von Bildern. Ein DNN hingegen hat keine spezielle Architektur und kann für eine Vielzahl von Aufgaben eingesetzt werden.
Ein CNN lernt Merkmale aus Bildern mit Hilfe von Faltungsschichten, während ein DNN Merkmale mit Hilfe von verschiedenen [Arten von Schichten] (https://www.geeksforgeeks.org/deep-neural-network-with-l-layers/) lernt.
Ein CNN ist schwieriger zu trainieren, benötigt mehr Daten und ist im Vergleich zu einem DNN rechenintensiver.
Was sind die drei Schichten eines CNN?
Die drei Schichten eines CNN sind die Aktivierungsschicht, die Faltungsschicht, die Pooling-Schicht und die vollständig verbundene Schicht.
Faltungsschicht - Diese Schicht ist für die Extraktion von Merkmalen aus Bildern zuständig. Sie arbeitet, indem sie Bilder mit einem Filter abtastet, der eine kleine Matrix von Gewichten ist. Der Filter bewegt sich über das Bild, und die Gewichte werden mit den Werten der Pixel im Bild multipliziert. Schließlich wird eine Merkmalskarte erstellt, die die extrahierten Merkmale enthält.
Pooling-Schicht - Die Pooling-Schicht reduziert die Größe der Merkmalskarten. Zu diesem Zweck gibt es zwei gängige Pooling-Techniken: Max-Pooling und Average-Pooling.
Voll verknüpfte Schicht - Dies ist die gleiche Schicht wie bei herkömmlichen neuronalen Netzen, die die Ausgabe des CNN klassifizieren. Die Neuronen in den vollständig verknüpften Schichten klassifizieren das Bild dann in eine Reihe von Klassen.
Was ist ein Faltungsneuronales Netz beim Deep Learning?
Ein Convolutional Neural Network ist eine Art von Deep Neural Network, das Bilder, Reden und Videos so verarbeitet, dass Sie damit in der wachsenden digitalen Welt reale Vorhersagen über strukturierte/[unstrukturierte] (https://zilliz.com/blog/introduction-to-unstructured-data) Daten treffen können.
Ein CNN hilft dabei, menschliche Emotionen, Verhalten, Interessen, Vorlieben, Abneigungen usw. einfach und effizient vorherzusagen.
- Convolutional Neural Network - Vorteile und Nachteile
- Gängige Regularisierungstechniken in CNNs
- **CNN-Architektur und ihre Funktionsweise**
- Arten von Faltungsneuronalen Netzen
- **Einfache CNN-Implementierung mit PyTorch**
- **FAQs**
Inhalte
Kostenlos starten, einfach skalieren
Testen Sie die vollständig verwaltete Vektordatenbank, die für Ihre GenAI-Anwendungen entwickelt wurde.
Zilliz Cloud kostenlos ausprobieren