Deep-Learning-Modelltraining mit Fast.ai

Inhalt

Dieser Artikel wurde im Rahmen der Data Science Blogathon

Einführung

Fast.ai verwendet fortschrittliche Methoden und Ansätze im Deep Learning, um hochmoderne Ergebnisse zu erzielen. Dieser Ansatz, den wir diskutieren werden, ermöglicht es uns, genauere Modelle zu trainieren, Schneller, mit weniger Daten und in weniger Zeit und Geld.

Fast.ai wurde gegründet von Jeremy Howard Ja Raquel Thomas um Deep-Learning-Profis eine schnelle und einfache Möglichkeit zu bieten, Spitzenergebnisse in den Standardbereichen des überwachten Lernens von Deep Learning zu erzielen, nämlich, Sichtfilterung, Text, tabellarisch und kollaborativ.

Beginnen wir nun mit Fast.ai.

Dieses Tutorial setzt ein grundlegendes Verständnis von Python3 voraus. Ein Jupyter-Laptop mit GPU ist erforderlich, da die GPU den Trainingsprozess beschleunigt 100 mal im Vergleich zur CPU. Sie können darauf zugreifen von Google-Kollaboration Dies ist eine Jupyter-Laptop-Umgebung und bietet eine kostenlose GPU. Verweisen ist um die kostenlose GPU in Colab zu aktivieren.

Trainieren Sie einen Bildklassifizierer

Lassen Sie uns einen grundlegenden MNIST-Bildklassifikator mit Fast.ai trainieren. Der MNIST-Datensatz besteht aus Bildern handgeschriebener Ziffern aus dem 0 al 9. Deswegen, verfügt über 10 Klassen und ist ein Mehrklassen-Klassifikationsproblem. Es besteht aus 60000 Bilder im Trainingsset und 10000 Bilder im Validierungsset.

Importe

In der ersten Zelle, Führen Sie Folgendes aus, um sicherzustellen, dass alle erforderlichen Bibliotheken installiert sind. Andererseits, Die Fastai-Bibliothek wird installiert und Sie müssen die Laufzeit neu starten.

!pip install fastai --upgrade

Später, Lassen Sie uns die Fastai Vision-Bibliothek importieren,

von fastai.vision.all import *

Wenn Sie Erfahrung in der Python-Programmierung oder Softwareentwicklung haben, Sie werden sich fragen, ob Sie alle Untermodule und Funktionen der Klasse importieren sollen (nämlich, benutzen *) Es ist eine ungesunde Praxis. Aber die fastai-Bibliothek ist so konzipiert, dass nur benötigte Funktionen importiert werden und der Speicher nicht unnötig belastet wird.

Datendownload

Jetzt, Laden wir die erforderlichen Daten herunter,

Pfad = untar_data(URLs.MNIST)

Hier verwenden wir eine Fastai-Funktion untar_data die die URL des Datensatzes nimmt und den Datensatz herunterlädt und extrahiert und dann den Pfad der Daten zurückgibt. Gibt zurück Pathlibs PosixPfad Objekt, mit dem Sie problemlos auf Dateisysteme zugreifen und diese navigieren können. Wir greifen auf die URL des MNIST-Datensatzes vom fastai . zu URLs Methode bestehend aus URLs vieler verschiedener Datensätze.

Wir können den Inhalt im Pfad überprüfen mit

#to list the contents 
path.ls()

Wir können sehen, dass es zwei Ordner gibt. Ausbildung Ja Tests bestehend aus Trainingsdaten und Validierungsdaten, beziehungsweise.

Lade Daten

Jetzt können wir die Daten laden,

dls = ImageDataLoaders.from_folder(Pfad=Pfad, 
                                   train='training', 
                                   valid='testen', 
                                   shuffle=Wahr)

ImageDataLoader Es ist eine der Arten von Klassen, die wir verwenden, um Datensätze für Computer Vision-Probleme zu laden. Allgemein, Computer-Vision-Datensätze sind so strukturiert, dass das Tag eines Bildes der Name des Ordners ist, in dem das Bild vorhanden ist. Wie unser Datensatz so aufgebaut ist, Wir verwenden eine Methode from_folder um Bilder aus Ordnern im angegebenen Pfad zu laden.

Wir geben den Pfad des Datensatzes an, von dem die Bilder in Stapeln geladen werden, wir geben den Namen der Ordner an, die aus Trainings- und Validierungsdaten bestehen, die für Training und Validierung verwendet werden, und dann initialisieren wir Mischen ein Wahres, was garantiert, dass während des Trainings des Modells, Bilder werden gemischt und in das Modell eingespeist.

Für weitere Informationen zu jeder Fastai-Funktion, wir können die doc-Methode verwenden () die die kurze Dokumentation zu dieser Funktion zeigt.

doc(ImageDataLoaders.from_folder)

Wir können einige der Daten sehen, indem wir show_batch () Methode,

dls.train.show_batch()
dls.valid.show_batch()

Zeigen Sie einige Bilder des Trainingssets bzw. des Validierungssets an.

Modelltraining

Jetzt erstellen wir das Modell,

lernen = cnn_lerner(dls, 
                    resnet18, 
                    Metriken=[Richtigkeit, Fehlerrate])

Hier verwenden wir cnn_learner nämlich, spezifizieren Sie fastai, um ein konvolutionelles neuronales Netzwerkmodell aus der gegebenen Architektur zu erstellen, nämlich resnet18 und trainieren Sie auf dem angegebenen Datenlader, nämlich dls und verfolgen Sie die bereitgestellten Metriken, nämlich Präzision Ja Fehlerrate.

CNN ist der modernste Ansatz für die Modellierung von Computer Vision. Hier verwenden wir eine Technik namens Lerntransfer um unser Modell zu trainieren. Diese Technik verwendet a Vorbereitetes Modell nämlich, eine Standardarchitektur und bereits für einen anderen Zweck trainiert. Lassen Sie uns im nächsten Abschnitt ins Detail gehen.

Jetzt trainieren wir (in Wirklichkeit, lass uns stimmen) das Model,

Wir können sehen, dass das Modell während des Trainings mit Daten beginnt 4 Epochen. Die Ergebnisse sehen wie folgt aus,

26255Screenshot202021-05-2720at2012-42-0420pm-8952392

Woah !! eine Genauigkeit von 99% und fast ein 0,8% der error_rate sind, buchstäblich, Spitzenergebnisse. Was ist mehr, wir konnten dies mit nur erreichen 4 Epochen, 5 Codezeilen und 5 Trainingsminuten.

Zusammenfügen,

von fastai.vision.all import *
Pfad = untar_data(URLs.MNIST)
dls = ImageDataLoaders.from_folder(Pfad=Pfad, 
                                   train='training', 
                                   valid='testen', 
                                   shuffle=Wahr)
lernen = cnn_lerner(dls, 
                    resnet18, 
                    Metriken=[Richtigkeit, Fehlerrate])
learn.fine_tune(4)

Dies ist möglich dank einer Technik namens Lerntransfer. Lass uns das etwas genauer besprechen.

Lerntransfer

vor dem Fortfahren, wir müssen die vortrainierten Modelle kennen.

Zuvor trainierte Modelle es handelt sich im Grunde um Architekturen, die bereits auf einem anderen Datensatz und für einen anderen Zweck trainiert wurden. Zum Beispiel, wir verwendeten ärgerlich18 wie unser vortrainiertes Netzwerk. Auch bekannt als Restnetzwerke, resent18 besteht aus 18 Ebenen und wird auf über einer Million Bildern aus dem ImageNet-Datensatz trainiert. Dieses vortrainierte Netzwerk kann Bilder leicht klassifizieren in 1000 Lektionen, wie Bücher, Bleistifte, Tiere, etc. Deswegen, Dieses Modell kennt verschiedene Objekte und Dinge, noch bevor es auf unserem Datensatz trainiert wird. Deshalb heißt es Rote Präentrenada.

Jetzt, Transfer Learning ist die Technik, die es uns ermöglicht, ein zuvor trainiertes Modell für eine neue Aufgabe und einen neuen Datensatz zu verwenden. Lerntransfer es ist im Grunde der Prozess, ein vortrainiertes Modell für eine andere Aufgabe als die ursprünglich trainierte zu verwenden, nämlich, In diesem Fall verwenden wir resent18, um mit Bildern handgeschriebener Ziffern zu trainieren.

Dies ist möglich durch einen grundlegenden Schritt namens sintonia FINA. Wenn wir ein zuvor trainiertes Modell haben, Wir verwenden diesen Schritt, um das zuvor trainierte Modell entsprechend den Anforderungen unserer Aufgabe zu aktualisieren / Daten. Die Feinabstimmung ist im Grunde eine Transferlerntechnik, die die Gewichte des vortrainierten Modells aktualisiert, indem sie für einige Epochen im neuen Datensatz trainiert..

Deswegen, Mit dieser Technik können wir bei unserer Aufgabe topaktuelle Ergebnisse erzielen, nämlich, handschriftliche Ziffern klassifizieren.

Nun lass uns ein paar Vorhersagen treffen

Bilder vorhersagen

Zuerst, Lassen Sie uns alle Bildpfade im Testsatz abrufen und sie dann in ein Bild konvertieren und die Vorhersage treffen.

# Holen Sie sich alle Bildpfade aus dem Testordner
images = get_image_files(Pfad/'Testen')
# Bild auswählen und anzeigen
img = PILImage.create(Bilder[4432])
img

Sagen Sie das Bild voraus

# die Bildklasse vorhersagen
lbl, _ , _ = lernen.vorhersagen(img)
lbl

Klassifizierungsbericht

Wir können auch einen Klassifizierungsbericht aus dem Modell zur Inferenz erstellen.

interep = KlassifizierungInterpretation.from_learner(lernen)
interep.plot_confusion_matrix()
44916Screenshot202021-05-2720at201-19-2820pm-4196971

Das können wir fast sehen 10000 Bilder, nur einige Bilder wurden falsch klassifiziert.

Vielen Dank und viel Spaß beim Deep Learning!!

Verweise:

1. Praktisches Deep Learning für Programmierer von Jeremy Howard und Sylvain Gugger

Von Narasimha Karthik J
Du kannst dich mit mir verbinden durch Aus dem Link Ö Twitter

Twitter

Die in diesem Artikel gezeigten Medien zum Erstellen von Deep-Learning-Modellen der nächsten Generation mit Fast.ai sind nicht Eigentum von DataPeaker und werden nach Ermessen des Autors verwendet.

Abonniere unseren Newsletter

Wir senden Ihnen keine SPAM-Mail. Wir hassen es genauso wie du.