Dieser Artikel wurde im Rahmen der Data Science Blogathon
Überblick
In diesem Artikel wird kurz auf CNN . eingegangen, eine spezielle Variante neuronaler Netze, die speziell für bildbezogene Aufgaben entwickelt wurde. Der Artikel konzentriert sich hauptsächlich auf den Implementierungsteil von CNN. Es wurden alle Anstrengungen unternommen, um diesen Artikel interaktiv und unkompliziert zu gestalten.. Viel Spaß beim Lernen !!

Einführung
Convolutional Neural Networks wurden im Jahr von Yann LeCun und Yoshua Bengio eingeführt 1995 die später außergewöhnliche Ergebnisse im Bereich der Bilder zeigte. Dann, Was sie im Vergleich zu gewöhnlichen neuronalen Netzen bei der Anwendung im Bildbereich besonders machte? Einen der Gründe erkläre ich an einem einfachen Beispiel. Tenga en cuenta que se le ha encomendado la tarea de clasificar las imágenes de dígitos escritos a mano y que a continuación se muestran algunos ejemplos de conjuntos de AusbildungTraining ist ein systematischer Prozess zur Verbesserung der Fähigkeiten, körperliche Kenntnisse oder Fähigkeiten. Es wird in verschiedenen Bereichen angewendet, wie Sport, Aus- und Weiterbildung. Zu einem effektiven Trainingsprogramm gehört auch die Zielplanung, Regelmäßiges Üben und Bewerten der Fortschritte. Anpassung an individuelle Bedürfnisse und Motivation sind Schlüsselfaktoren, um in jeder Disziplin erfolgreiche und nachhaltige Ergebnisse zu erzielen.....

Wenn du richtig beobachtest, Sie können feststellen, dass alle Ziffern in der Mitte der jeweiligen Bilder erscheinen. Entrenar un modelo de rotes neuronalesNeuronale Netze sind Rechenmodelle, die von der Funktionsweise des menschlichen Gehirns inspiriert sind. Sie nutzen Strukturen, die als künstliche Neuronen bekannt sind, um Daten zu verarbeiten und daraus zu lernen. Diese Netze sind grundlegend im Bereich der künstlichen Intelligenz, Dies ermöglicht erhebliche Fortschritte bei Aufgaben wie der Bilderkennung, Verarbeitung natürlicher Sprache und Vorhersage von Zeitreihen, unter anderen. Ihre Fähigkeit, komplexe Muster zu erlernen, macht sie zu mächtigen Werkzeugen.. normal con estas imágenes puede dar un buen resultado si la imagen de prueba es de un tipo similar. Aber, Was ist, wenn das Testbild wie unten aussieht??

Hier erscheint die Zahl Neun in der Ecke des Bildes. Wenn wir ein einfaches neuronales Netzmodell verwenden, um dieses Bild zu klassifizieren, unser Modell kann abrupt versagen. Aber wenn das gleiche Testbild einem CNN-Modell gegeben wird, es wird sehr wahrscheinlich richtig klassifiziert. Der Grund für die bessere Leistung ist, dass nach räumlichen Merkmalen im Bild gesucht wird. Für den obigen Fall selbst, auch wenn die Zahl Neun in der linken Ecke des Rahmens steht, das trainierte CNN-Modell erfasst die Merkmale im Bild und sagt wahrscheinlich voraus, dass die Zahl die Ziffer Neun ist. Ein normales neuronales Netzwerk kann diese Art von Magie nicht ausführen. Lassen Sie uns nun kurz die Hauptbausteine von CNN besprechen.
Hauptkomponenten der Architektur eines CNN-Modells

Dies ist ein einfaches CNN-Modell, das erstellt wurde, um zu klassifizieren, ob das Bild eine Katze enthält oder nicht. Dann, die Hauptkomponenten eines CNN sind:
1. FaltdeckelDie Faltungsschicht, grundlegend in Convolutional Neural Networks (CNN), Es wird hauptsächlich für die Datenverarbeitung mit gitterartigen Strukturen verwendet, als Bilder. Dieser Layer wendet Filter an, die relevante Features extrahieren, wie Kanten und Texturen, Ermöglicht dem Modell, komplexe Muster zu erkennen. Seine Fähigkeit, die Dimensionalität von Daten zu reduzieren und wichtige Informationen zu speichern, macht es zu einem wichtigen Werkzeug für Computer-Vision-Aufgaben..
2. Gruppierungsebene
3.Vollständig verbundene Schicht
Faltdeckel
Faltungsebenen helfen uns, die im Bild vorhandenen Merkmale zu extrahieren. Diese Extraktion wird mit Hilfe von Filtern erreicht. Beachten Sie den folgenden Vorgang.

Hier sehen wir, dass ein Fenster über das gesamte Bild gleitet, wo das Bild als Raster gerendert wird (So sieht der Computer Bilder, bei denen die Raster mit Zahlen gefüllt sind!!). Sehen wir uns nun an, wie die Berechnungen in der Faltungsoperation durchgeführt werden.

Angenommen, die Karte der Eingangseigenschaften ist unser Bild und der Faltungsfilter ist das Fenster, über das wir gleiten werden. Schauen wir uns nun eine der Instanzen der Faltungsoperation an.

Wenn der Faltungsfilter dem Bild überlagert ist, die jeweiligen Elemente werden multipliziert. Später, die multiplizierten Werte werden addiert, um einen einzelnen Wert zu erhalten, der in der Ausgabe-Feature-Map ausgefüllt wird. Dieser Vorgang wird fortgesetzt, bis wir das Fenster über das Kennfeld der Eingabeeigenschaften schieben., damit das Ausgangskennfeld füllen.
Gruppierungsebene
La idea detrás del uso de una capa de agrupación es reducir la Abmessungen"Dimension" Es handelt sich um einen Begriff, der in verschiedenen Disziplinen verwendet wird, wie z.B. Physik, Mathematik und Philosophie. Er bezieht sich auf das Ausmaß, in dem ein Objekt oder Phänomen analysiert oder beschrieben werden kann. In der Physik, zum Beispiel, Es ist die Rede von räumlichen und zeitlichen Dimensionen, während es sich in der Mathematik auf die Anzahl der Koordinaten beziehen kann, die notwendig sind, um einen Raum darzustellen. Es zu verstehen, ist grundlegend für das Studium und... del mapa de características. Für die unten angegebene Darstellung, Wir haben eine maximale Gruppierungsschicht von verwendet 2 * 2. Jedes Mal gleitet das Fenster über das Bild, wir nehmen den maximalen Wert innerhalb des Fensters.

Schließlich, nach maximalem Gruppenbetrieb, Wir können hier sehen, dass die Dimension der Eingabe, nämlich, 4 * 4, wurde reduziert auf 2 * 2.
Vollständig verbundene Schicht
Diese Schicht ist im hinteren Abschnitt der CNN-Modellarchitektur vorhanden, wie zuvor zu sehen. Die Eingabe für die vollständig verbundene Schicht sind die reichhaltigen Merkmale, die durch Faltungsfilter extrahiert wurden. Esto luego se propaga hacia adelante hasta la Ausgabe-LayerDas "Ausgabe-Layer" ist ein Konzept, das im Bereich der Informationstechnologie und des Systemdesigns verwendet wird. Es bezieht sich auf die letzte Schicht eines Softwaremodells oder einer Architektur, die für die Präsentation der Ergebnisse für den Endbenutzer verantwortlich ist. Diese Schicht ist entscheidend für die Benutzererfahrung, Da es eine direkte Interaktion mit dem System und die Visualisierung der verarbeiteten Daten ermöglicht...., wobei wir die Wahrscheinlichkeit erhalten, dass das Eingabebild zu verschiedenen Klassen gehört. Das vorhergesagte Ergebnis ist die Klasse mit der höchsten Wahrscheinlichkeit, die das Modell vorhergesagt hat.
Codeimplementierung
Hier nehmen wir den Fashion MNIST als unseren Problemdatensatz. Der Datensatz enthält T-Shirts, Hose, Pullover, Kleider, Mäntel, Flip Flops, Hemden, Schuhe, Taschen und Stiefeletten. Die Aufgabe besteht darin, nach dem Training des Modells ein bestimmtes Bild in die oben genannten Klassen einzuordnen.

Wir implementieren den Code in Google Colab, da sie die Nutzung kostenloser GPU-Ressourcen für einen festgelegten Zeitraum zur Verfügung stellen. Wenn Sie neu in der Colab-Umgebung und den GPUs sind, Überprüfen Sie diesen Blog, um eine bessere Vorstellung zu bekommen. Unten ist die CNN-Architektur, die wir bauen werden.

Paso 1: Importieren Sie die erforderlichen Bibliotheken
Importieren von OS Taschenlampe importieren Torchvision importieren Tarfile importieren aus Torchvision Import transformiert aus Torch.utils.data import random_split aus Torch.utils.data.dataloader importieren DataLoader brenner.nn als nn importieren aus fackel.nn Importfunktion als F aus der itertools-Importkette
Paso -2: Herunterladen des Test- und Trainingsdatensatzes
train_set = Torchvision.datasets.FashionMNIST("/usr", herunterladen=Wahr, transform=
transformiert.Verfassen([transformiert.ToTensor()]))
test_set = Torchvision.datasets.FashionMNIST("./Daten", herunterladen=Wahr, train=Falsch, transform=
transformiert.Verfassen([transformiert.ToTensor()]))
Paso 3 Aufteilung des Trainingssets für Training und Validierung
train_size = 48000 val_size = 60000 - train_size train_ds,val_ds = random_split(train_set,[train_size,Wert_Größe])
Paso 4 Laden Sie den Datensatz mit dem Dataloader . in den Speicher
train_dl = DataLoader(train_ds,batch_size=20,shuffle=True) val_dl = DataLoader(val_ds,batch_size=20,shuffle=True) Klassen = train_set.classes
Lassen Sie uns nun die geladenen Daten visualisieren,
für Bilder,Etiketten in train_dl:
für img in imgs:
arr_ = np.squeeze(img)
plt.zeigen()
brechen
brechen

Paso -5 Definieren der Architektur
brenner.nn als nn importieren
brenner.nn.funktional als F importieren
#definiere die CNN-Architektur
Klasse Net(nn.Modul):
def __init__(selbst):
Super(Netz, selbst).__drin__()
#Faltungsschicht-1
self.conv1 = nn.Conv2d(1,6,5, padding=0)
#Faltungsschicht-2
self.conv2 = nn.Conv2d(6,10,5,padding=0)
# maximale Pooling-Schicht
self.pool = nn.MaxPool2d(2, 2)
# Vollständig verbundene Schicht 1
self.ff1 = nn.Linear(4*4*10,56)
# Vollständig verbundene Schicht 2
self.ff2 = nn.Linear(56,10)
def vorwärts(selbst, x):
# Hinzufügen einer Sequenz von Faltungs- und Max-Pooling-Schichten
#Eingangsdimmung-28*28*1
x = self.conv1(x)
# Nach der Faltungsoperation, Ausgangsdimmung - 24*24*6
x = self.pool(x)
# Nach Max. Poolbetrieb Ausgangsdimmung - 12*12*6
x = self.conv2(x)
# Nach der Faltungsoperation Ausgangsdimmung - 8*8*10
x = self.pool(x)
# Max. Pool-Ausgangsdimmung 4*4*10
x = x.Ansicht(-1,4*4*10) # Umformen der Werte in eine Form, die für die Eingabe des vollständig verbundenen Layers geeignet ist
x = F.relu(selbst.ff1(x)) # Anwenden von Relu auf die Ausgabe der ersten Ebene
x = F.sigmoid(selbst.ff2(x)) # Anwenden von Sigmoid auf die Ausgabe der zweiten Ebene
Rückgabe x
# Erstellen Sie ein vollständiges CNN model_scratch = Net() drucken(Modell)
# Tensoren auf GPU verschieben, wenn CUDA verfügbar ist
wenn use_cuda:
model_scratch.cuda()
Paso 6: definición de la Verlust-FunktionDie Verlustfunktion ist ein grundlegendes Werkzeug des maschinellen Lernens, das die Diskrepanz zwischen Modellvorhersagen und tatsächlichen Werten quantifiziert. Ziel ist es, den Trainingsprozess zu steuern, indem dieser Unterschied minimiert wird, Dadurch kann das Modell effektiver lernen. Es gibt verschiedene Arten von Verlustfunktionen, wie z. B. mittlerer quadratischer Fehler und Kreuzentropie, jeder für unterschiedliche Aufgaben geeignet und...
# Verlustfunktion
brenner.nn als nn importieren
brenner.optim als optim importieren
Kriterium_scratch = nn.CrossEntropyLoss()
def get_optimizer_scratch(Modell):
Optimierer = optim.SGD(modell.parameter(),lr = 0.04)
Renditeoptimierer
Paso 7: Implementierung des Trainings- und Validierungsalgorithmus
# Implementierung des Trainingsalgorithmus
def zug(n_epochen, Lader, Modell, Optimierer, Kriterium, use_cuda, save_path):
"""gibt trainiertes Modell zurück"""
# Tracker für minimalen Validierungsverlust initialisieren
valid_loss_min = np.Inf
für Epoche in Reichweite(1, n_epochen+1):
# Variablen initialisieren, um Trainings- und Validierungsverluste zu überwachen
train_loss = 0.0
valid_loss = 0.0
# Zugphase #
# das Modul in den Trainingsmodus versetzen
modell.zug()
für batch_idx, (Daten, Ziel) aufzählen(Lader['train']):
# auf GPU wechseln
wenn use_cuda:
Daten, Ziel = data.cuda(), ziel.cuda()
optimizer.zero_grad()
Ausgabe = Modell(Daten)
Verlust = Kriterium(Ausgang, Ziel)
verlust.rückwärts()
Optimierer.Schritt()
train_loss = train_loss + ((1 / (batch_idx + 1)) * (verlust.daten.element() - train_loss))
# validiere das Modell #
# Setzen Sie das Modell in den Evaluierungsmodus
model.eval()
für batch_idx, (Daten, Ziel) aufzählen(Lader['valid']):
# auf GPU wechseln
wenn use_cuda:
Daten, Ziel = data.cuda(), ziel.cuda()
Ausgabe = Modell(Daten)
Verlust = Kriterium(Ausgang, Ziel)
valid_loss = valid_loss + ((1 / (batch_idx + 1)) * (verlust.daten.element() - valid_loss))
# Trainings-/Validierungsstatistik drucken
drucken('Epoche: {} tTrainingsverlust: {:.6F} tValidierungsverlust: {:.6F}'.format(
Epoche,
train_loss,
valid_loss
))
## Wenn sich der Validierungsverlust verringert hat, dann das Modell speichern
if valid_loss <= valid_loss_min:
drucken('Validierungsverlust verringert ({:.6F} --> {:.6F}). Saving model ...'.format(
valid_loss_min,
valid_loss))
fackel.save(model.state_dict(), save_path)
valid_loss_min = valid_loss
Rückgabemodell
Paso 8: Trainings- und Evaluierungsphase
num_epochen = 15
model_scratch = trainieren(Anzahl_Epochen, loaders_scratch, model_scratch, get_optimizer_scratch(model_scratch),
Kriterium_scratch, use_cuda, 'model_scratch.pt')

Beachten Sie, dass jedes Mal, wenn der Validierungsverlust abnimmt, wir speichern den zustand des modells.
Paso 9 Testphase
def test(Lader, Modell, Kriterium, use_cuda):
# Überwachen Sie den Testverlust und die Genauigkeit
test_loss = 0.
richtig = 0.
gesamt = 0.
# Setzen Sie das Modul in den Auswertemodus
model.eval()
für batch_idx, (Daten, Ziel) aufzählen(Lader['test']):
# auf GPU wechseln
wenn use_cuda:
Daten, Ziel = data.cuda(), ziel.cuda()
# Vorwärtspass: vorhergesagte Ausgaben berechnen, indem Eingaben an das Modell übergeben werden
Ausgabe = Modell(Daten)
# Berechnen Sie den Verlust
Verlust = Kriterium(Ausgang, Ziel)
# durchschnittlichen Testverlust aktualisieren
test_loss = test_loss + ((1 / (batch_idx + 1)) * (verlust.daten.element() - test_loss))
# Ausgabewahrscheinlichkeiten in vorhergesagte Klasse umwandeln
pred = output.data.max(1, keepdim=Wahr)[1]
# vergleiche Vorhersagen mit echtem Label
richtig += np.summe(np.squeeze(pred.eq(target.data.view_as(pred)),Achse=1).Zentralprozessor().numpy())
gesamt += data.size(0)
drucken('Test Loss: {:.6F}n'.format(test_loss))
drucken('nTest Accuracy: %2D%% (%2d /% 2d)' % (
100. * Korrekt / gesamt, Korrekt, gesamt))
# Laden Sie das Modell mit der besten Validierungsgenauigkeit
model_scratch.load_state_dict(fackel.laden('model_scratch.pt'))
Prüfung(loaders_scratch, model_scratch, Kriterium_scratch, use_cuda)

Paso 10 Mit einer Probe testen
Die Funktion, die zum Testen des Modells mit einem einzelnen Bild definiert ist.
def predict_image(img, Modell):
# In einen Stapel von . umwandeln 1
xb = img.unsqueeze(0)
# Vorhersagen vom Modell abrufen
yb = Modell(xb)
# Wählen Sie den Index mit der höchsten Wahrscheinlichkeit
_, preds = brenner.max(yb, dim=1)
# das Bild drucken
plt.imshow(img.squeeze( ))
#das Klassenlabel für das Bild zurückgeben
zurück train_set.classes[Preds[0].Artikel()]
img,label = test_set[9] predict_image(img,model_scratch)

Fazit
Aquí habíamos discutido brevemente las principales operaciones en una rote neuronale FaltungFaltungsneurale Netze (CNN) sind eine Art von neuronaler Netzwerkarchitektur, die speziell für die Datenverarbeitung mit einer Gitterstruktur entwickelt wurde, als Bilder. Sie verwenden Faltungsschichten, um hierarchische Merkmale zu extrahieren, Dies macht sie besonders effektiv bei Mustererkennungs- und Klassifizierungsaufgaben. Dank seiner Fähigkeit, aus großen Datenmengen zu lernen, CNNs haben Bereiche wie Computer Vision revolutioniert.. y su arquitectura. Ein einfaches Faltungsneuralnetzwerkmodell wurde ebenfalls implementiert, um eine bessere Vorstellung vom praktischen Anwendungsfall zu erhalten. Sie finden den implementierten Code in my GitHub-Repository. Was ist mehr, Sie können die Leistung des bereitgestellten Modells verbessern, indem Sie den Datensatz vergrößern, utilizando técnicas de RegulierungDie Regularisierung ist ein administrativer Prozess, der darauf abzielt, die Situation von Personen oder Organisationen zu formalisieren, die außerhalb des gesetzlichen Rahmens tätig sind. Dieses Verfahren ist unerlässlich, um Rechte und Pflichten zu gewährleisten, sowie zur Förderung der sozialen und wirtschaftlichen Inklusion. In vielen Ländern, Die Regularisierung wird in Migrationskontexten angewendet, Arbeit und Steuern, denjenigen, die sich in irregulären Situationen befinden, den Zugang zu Leistungen zu ermöglichen und sich vor möglichen Sanktionen zu schützen.... als die StandardisierungNormung ist ein grundlegender Prozess in verschiedenen Disziplinen, , die darauf abzielt, einheitliche Standards und Kriterien zur Verbesserung von Qualität und Effizienz festzulegen. In Kontexten wie dem Ingenieurwesen, Bildung und Verwaltung, Standardisierung erleichtert den Vergleich, Interoperabilität und gegenseitiges Verständnis. Bei der Implementierung von Standards, Der Zusammenhalt wird gefördert und die Ressourcen werden optimiert, die zu einer nachhaltigen Entwicklung und zur kontinuierlichen Verbesserung der Prozesse beiträgt.... por lotes y el abandono en las capas completamente conectadas de la arquitectura. Was ist mehr, Beachten Sie, dass auch vortrainierte CNN-Modelle verfügbar sind, die mit großen Datensätzen trainiert wurden. Durch die Verwendung dieser Modelle der neuesten Generation, Sie werden zweifellos die besten Messwerte für ein bestimmtes Problem erzielen.
Verweise
- https://www.youtube.com/watch?v = EHuACSjijbI – Jupiter
- https://www.youtube.com/watch?v = 2-Ol7ZB0MmU&t=1503s- Eine freundliche Einführung in konvolutionelle neuronale Netze und Bilderkennung
Über den Autor
Mein Name ist Adwait Dathan, Ich studiere derzeit meinen Master in Künstlicher Intelligenz und Data Science. Fühlen Sie sich frei, mit mir in Verbindung zu treten Linkedin.
Die in diesem Artikel gezeigten Medien sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.



