TensorFlow

Erste Schritte mit TensorFlow

Erste Schritte mit TensorFlow
TensorFlow ist das geistige Kind von Google und im Kern eine Bibliothek für numerische Berechnungen. Es ist in C/C++ geschrieben und hat eine sehr flexible API. Diese API kann mit einem Python-Frontend verbunden werden, sodass Sie kleine Ausschnitte von Python-Code schreiben können, um komplizierte Probleme zu lösen. Eine flexible und konsistente API ermöglicht es Entwicklern auch, denselben Front-End-Code zu verwenden, um auf verschiedenen Plattformen wie Nvidia-GPUs, Allzweck-CPUs und sogar mobilen und eingebetteten Geräten zu laufen, die jeweils eine sehr unterschiedliche Implementierung im Back-End haben.

TensorFlow hat im Bereich des maschinellen Lernens immensen Einsatz gefunden, gerade weil maschinelles Lernen viel Zahlenverarbeitung beinhaltet und als verallgemeinerte Problemlösungstechnik verwendet wird. Und obwohl wir mit Python damit interagieren werden, hat es Front-Ends für andere Sprachen wie Go, Node.js und sogar C#.

Tensorflow ist wie eine Blackbox, die alle mathematischen Feinheiten darin verbirgt und der Entwickler ruft einfach die richtigen Funktionen auf, um ein Problem zu lösen. Aber welches Problem?

Maschinelles Lernen (ML)

Angenommen, Sie entwerfen einen Bot, um eine Partie Schach zu spielen. Aufgrund der Art und Weise, wie Schach entworfen ist, wie sich die Figuren bewegen und das klar definierte Ziel des Spiels ist, ist es durchaus möglich, ein Programm zu schreiben, das das Spiel extrem gut spielen würde. Tatsächlich würde es die gesamte Menschheit im Schach überlisten. Es würde genau wissen, welchen Zug es angesichts des Zustands aller Figuren auf dem Brett machen muss.

Allerdings kann ein solches Programm nur Schach spielen. Die Regeln des Spiels sind in die Logik des Codes eingebettet und alles, was das Programm tut, ist, diese Logik rigoros und genauer auszuführen, als jeder Mensch es könnte. Es handelt sich nicht um einen Allzweckalgorithmus, mit dem Sie einen Spiele-Bot entwerfen können.

Mit maschinellem Lernen ändern sich die Paradigmen und die Algorithmen werden immer universeller.

Die Idee ist einfach, sie beginnt mit der Definition eines Klassifikationsproblems. Sie möchten beispielsweise den Prozess der Identifizierung der Spinnenarten automatisieren. Die Ihnen bekannten Arten sind die verschiedenen Klassen (nicht zu verwechseln mit taxonomischen Klassen). Das Ziel des Algorithmus ist es, ein neues unbekanntes Bild in eine dieser Klassen einzuordnen.

Hier wäre der erste Schritt für den Menschen, die Merkmale verschiedener einzelner Spinnen zu bestimmen. Wir würden Daten über Länge, Breite, Körpermasse und Farbe einzelner Spinnen zusammen mit der Art, zu der sie gehören, liefern:

Länge Breite Masse Farbe Textur Spezies
5 3 12 Braun glatt Vaters lange Beine
10 8 28 Braun schwarz behaart Tarantel

Eine große Sammlung solcher individuellen Spider-Daten wird verwendet, um den Algorithmus zu "trainieren", und ein anderer ähnlicher Datensatz wird verwendet, um den Algorithmus zu testen, um zu sehen, wie gut er mit neuen Informationen abschneidet, die er noch nie zuvor gefunden hat, die wir jedoch bereits kennen Antwort auf.

Der Algorithmus wird randomisiert beginnen. Das heißt, jede Spinne würde unabhängig von ihren Merkmalen als jede der Arten klassifiziert werden. Wenn unser Datensatz 10 verschiedene Arten enthält, würde dieser naive Algorithmus aus purem Glück etwa 1/10 der Zeit die richtige Klassifizierung erhalten.

Aber dann würde der Aspekt des maschinellen Lernens beginnen, die Oberhand zu gewinnen. Es würde anfangen, bestimmte Funktionen mit einem bestimmten Ergebnis zu verknüpfen. Behaarte Spinnen sind zum Beispiel wahrscheinlich Vogelspinnen, ebenso wie die größeren Spinnen. Wenn also eine neue Spinne, die groß und behaart ist, auftaucht, wird ihr eine höhere Wahrscheinlichkeit zugewiesen, eine Vogelspinne zu sein. Beachten Sie, dass wir immer noch mit Wahrscheinlichkeiten arbeiten, weil wir von Natur aus mit einem probabilistischen Algorithmus arbeiten.

Der Lernteil funktioniert durch die Veränderung der Wahrscheinlichkeiten. Anfänglich beginnt der Algorithmus damit, Individuen nach dem Zufallsprinzip eine „Art“-Kennzeichnung zuzuweisen, indem zufällige Korrelationen wie „behaart“ und „daddy long legs“ hergestellt werden. Wenn eine solche Korrelation hergestellt wird und der Trainingsdatensatz nicht damit übereinstimmt, wird diese Annahme fallengelassen.

Wenn eine Korrelation durch mehrere Beispiele gut funktioniert, wird sie in ähnlicher Weise jedes Mal stärker. Diese Methode, der Wahrheit zu begegnen, ist bemerkenswert effektiv, dank vieler mathematischer Feinheiten, um die Sie sich als Anfänger nicht kümmern möchten.

TensorFlow und Training Ihres eigenen Blumenklassifikators

TensorFlow führt die Idee des maschinellen Lernens noch weiter. Im obigen Beispiel waren Sie dafür verantwortlich, die Merkmale zu bestimmen, die eine Spinnenart von einer anderen unterscheiden. Wir mussten einzelne Spinnen mühsam vermessen und Hunderte solcher Aufzeichnungen erstellen.

Aber wir können es besser machen, indem wir dem Algorithmus nur rohe Bilddaten zur Verfügung stellen, den Algorithmus Muster finden und verschiedene Dinge über das Bild verstehen lassen, wie das Erkennen der Formen im Bild und dann das Verständnis der Textur verschiedener Oberflächen, der Farbe , und so weiter und so fort. Dies ist der Anfang von Computer Vision und Sie können es auch für andere Arten von Eingaben verwenden, z. B. für Audiosignale und das Trainieren Ihres Algorithmus für die Spracherkennung. All dies fällt unter den Oberbegriff „Deep Learning“, bei dem maschinelles Lernen bis zum logischen Extrem getrieben wird.

Dieser verallgemeinerte Satz von Begriffen kann dann spezialisiert werden, wenn man sich mit vielen Blumenbildern beschäftigt und sie kategorisiert.

Im folgenden Beispiel verwenden wir ein Python2.7-Frontend zur Schnittstelle mit TensorFlow und wir werden pip (nicht pip3) verwenden, um TensorFlow zu installieren install. Die Python 3-Unterstützung ist noch ein wenig fehlerhaft.

Um Ihren eigenen Bildklassifizierer mit TensorFlow zu erstellen, installieren wir ihn zuerst mit Pip:

$pip installiere tensorflow

Als nächstes müssen wir das klonen tensorflow-for-poets-2 Git-Repository. Dies ist aus zwei Gründen ein wirklich guter Ausgangspunkt:

  1. Es ist einfach und leicht zu bedienen
  2. Es ist bis zu einem gewissen Grad vortrainiert. Zum Beispiel ist der Blumenklassifikator bereits darauf trainiert zu verstehen, welche Textur er betrachtet und welche Formen er betrachtet, sodass er weniger rechenintensiv ist.

Holen wir uns das Repository:

$git-Klon https://github.com/googlecodelabs/tensorflow-for-poets-2
$cd tensorflow-for-poets-2

Dies wird unser Arbeitsverzeichnis sein, daher sollten alle Befehle von nun an darin ausgegeben werden.

Wir müssen den Algorithmus noch für das spezifische Problem des Erkennens von Blumen trainieren, dafür brauchen wir Trainingsdaten, also bekommen wir das:

$curl http://download.Tensorfluss.org/example_images/flower_photos.tgz
| tar xz -C tf_files

Das Verzeichnis… ./tensorflow-for-poets-2/tf_files enthält eine Menge dieser Bilder, die ordnungsgemäß beschriftet und einsatzbereit sind. Die Bilder dienen zwei verschiedenen Zwecken:

  1. Schulung des ML-Programms
  2. Testen des ML-Programms

Sie können den Inhalt des Ordners überprüfen tf_files und hier werden Sie feststellen, dass wir uns auf nur 5 Blumenkategorien beschränken, nämlich Gänseblümchen, Tulpen, Sonnenblumen, Löwenzahn und Rosen rose.

Modell trainieren

Sie können den Trainingsprozess starten, indem Sie zunächst die folgenden Konstanten einrichten, um die Größe aller Eingabebilder auf eine Standardgröße zu ändern, und eine leichtgewichtige Mobilenet-Architektur verwenden:

$IMAGE_SIZE=224
$ARCHITECTURE="mobilenet_0.50_$IMAGE_SIZE"

Rufen Sie dann das Python-Skript auf, indem Sie den Befehl ausführen:

$python -m Skripte.umschulen \
--Bottleneck_dir=tf_files/Flaschenhälse \
--how_many_training_steps=500 \
--model_dir=tf_files/models/ \
--summaries_dir=tf_files/training_summaries/"$ARCHITECTURE" \
--output_graph=tf_files/retrained_graph.pb \
--output_labels=tf_files/retrained_labels.TXT \
--Architektur="$ARCHITEKTUR" \
--image_dir=tf_files/flower_photos

Obwohl hier viele Optionen angegeben sind, geben die meisten Ihre Eingabedatenverzeichnisse und die Anzahl der Iterationen sowie die Ausgabedateien an, in denen die Informationen über das neue Modell gespeichert werden. Dies sollte auf einem mittelmäßigen Laptop nicht länger als 20 Minuten dauern.

Sobald das Skript sowohl das Training als auch das Testen abgeschlossen hat, erhalten Sie eine Genauigkeitsschätzung des trainierten Modells, die in unserem Fall etwas höher als 90% war.

Verwenden des trainierten Modells

Jetzt können Sie dieses Modell für die Bilderkennung jedes neuen Bildes einer Blume verwenden. Wir verwenden dieses Bild:

Das Gesicht der Sonnenblume ist kaum sichtbar und das ist eine große Herausforderung für unser Model:

Um dieses Bild von Wikimedia Commons zu erhalten, verwenden Sie wget:

$wget https://upload.wikimedia.org/wikipedia/commons/2/28/Sunflower_head_2011_G1.jpg
$mv Sonnenblume_Kopf_2011_G1.jpg tf_files/unbekannt.jpg

Es wird gespeichert als Unbekannt.jpg unter dem tf_files Unterverzeichnis.

Jetzt, für den Moment der Wahrheit, werden wir sehen, was unser Modell zu diesem Bild zu sagen hat.Dazu rufen wir die label_image Skript:

$python -m Skripte.label_image --graph=tf_files/retrained_graph.pb --
image=tf_files/unbekannt.jpg

Sie erhalten eine Ausgabe ähnlich dieser:

Die Zahlen neben der Blumenart stellen die Wahrscheinlichkeit dar, dass unser unbekanntes Bild zu dieser Kategorie gehört. Zum Beispiel ist es 98.04% sicher, dass das Bild eine Sonnenblume ist und es nur 1 only ist.37% Chance, dass es sich um eine Rose handelt.

Fazit

Selbst mit sehr mittelmäßigen Rechenressourcen sehen wir eine erstaunliche Genauigkeit bei der Identifizierung von Bildern. Dies zeigt deutlich die Leistungsfähigkeit und Flexibilität von TensorFlow.

Von hier aus können Sie mit verschiedenen anderen Arten von Eingaben experimentieren oder versuchen, Ihre eigene unterschiedliche Anwendung mit Python und TensorFlow zu schreiben. Wenn Sie die interne Funktionsweise des maschinellen Lernens etwas besser kennenlernen möchten, haben Sie hier eine interaktive Möglichkeit, dies zu tun.

Installieren Sie das neueste OpenRA-Strategiespiel auf Ubuntu Linux
OpenRA ist eine Libre/Free Real Time Strategy Game Engine, die die frühen Westwood-Spiele wie den Klassiker Command & Conquer: Red Alert Red nachbilde...
Installieren Sie den neuesten Dolphin Emulator für Gamecube & Wii unter Linux
Mit dem Dolphin Emulator können Sie Ihre ausgewählten Gamecube- und Wii-Spiele auf Linux-Personalcomputern (PC) spielen. Als frei verfügbarer Open-So...
So verwenden Sie die GameConqueror-Cheat-Engine unter Linux
Der Artikel enthält eine Anleitung zur Verwendung der GameConqueror-Cheat-Engine unter Linux. Viele Benutzer, die Spiele unter Windows spielen, verwen...