Cover

Titelblatt

WILEY END USER LICENSE AGREEMENT

Besuchen Sie www.wiley.com/go/eula, um Wiley's E-Book-EULA einzusehen.

TensorFlow für Dummies

Schummelseite

Die wichtigsten TensorFlow-Pakete

Bevor Sie ein TensorFlow-Programm schreiben, sollten Sie sich mit den verschiedenen Paketen und ihren Modulen vertraut machen. Hier sind die zehn wichtigsten TensorFlow-Pakete.

Paket

Inhalt

tensorflow

Zentrales Paket des TensorFlow-Frameworks; wird üblicherweise über tf aufgerufen

tf.train

Optimierer und weitere Klassen für das Training

tf.nn

Klassen für neuronale Netze und zugehörige mathematische Operationen

tf.layers

Funktionen zur Arbeit mit mehrschichtigen neuronalen Netzen

tf.contrib

Noch instabiler oder experimenteller Code

tf.image

Funktionen zur Bildverarbeitung

tf.estimator

Komplexere Tools zum Training und zur Evaluierung

tf.logging

Funktionen, die Daten in ein Protokoll schreiben

tf.summary

Benötigte Klassen zur Erzeugung von Zusammenfassungen

tf.metrics

Funktionen zum Messen der Ergebnisse des maschinellen Lernens

Vier wichtige Optimierungsklassen

Beim Training in TensorFlow werden die Variablen eines Modells angepasst, um die Abweichung zwischen dem Modell und den beobachteten Daten, den sogenannten Verlust, zu minimieren. Für diese Optimierung hat TensorFlow zahlreiche Algorithmen parat. Die Auswahl des richtigen Algorithmus für das maschinelle Lernprogramm ist von höchster Bedeutung. Die Optimizer-Klasse läuft dabei außer Konkurrenz. Auf sie wird nicht direkt zugegriffen, vielmehr müssen Programme eine ihrer Subklassen instanziieren. Die Optimizer-Klasse spielt jedoch eine zentrale Rolle, da sie die so wichtige minimize-Methode definiert.

image GradientDescentOptimizer: Das ist der einfachste und am häufigsten genutzte Optimierer. Trotz seiner Popularität wird er von Experten aber nur selten empfohlen.

Der Grund dafür ist, dass vom Entwickler eine Lernrate festgelegt werden muss. Das ist ein Wert, der angibt, wie stark sich der Variablenwert von einem Schritt zum nächsten ändert. Ist die Lernrate zu groß, schreitet der Algorithmus zwar schnell voran, überspringt dadurch aber möglicherweise das Minimum und erreicht somit nie seinen Zielwert. Ist die Lernrate zu klein, arbeitet der Algorithmus präziser, benötigt aber entsprechend viel mehr Zeit. Zudem kann es passieren, dass der Optimierer seine Aufgabe an einem lokalen Minimum beendet statt am globalen Minimum. Ein weiterer Nachteil des Optimierers ist, dass er im ungünstigen Fall zwischen Werten oszilliert.

image MomentumOptimizer: Dieser Optimierer hat mit dem GradientDescentOptimizer viel gemeinsam, konvergiert aber normalerweise schneller und oszilliert auch seltener.

Um die aktuellen Variablen anzupassen, nutzt der Algorithmus vorangegangene Werte des Verlustgradienten. In einen als Akkumulation bezeichneten Wert gehen die Lernrate, der Verlustgradient und der Akkumulationswert aus dem vorherigen Schritt ein. Ein als Momentum bezeichneter konstanter Wert legt fest, wie stark der Einfluss des vorangegangenen Schritts auf den aktuellen Schritt ist.

Bewegt sich der Optimierer zügig in Richtung eines Minimums, beschleunigt der Optimierer und nähert sich dem Minimum noch schneller an. Hängt der Optimierer zwischen zwei Werten fest, werden die Variablen mit geringeren Veränderungen aktualisiert.

image AdagradOptimizer: Der Gradientenabstieg und der Momentum-Algorithmus wenden dieselbe Lernrate auf jede zu trainierende Variable und für jeden Schritt an. Unterschiedliche Variablen konvergieren jedoch nicht immer im selben Tempo gegen ihre Minima. Der adaptive Gradientenabstieg, kurz Adagrad, wird dieser Tatsache gerecht.

Adagrad erfreut sich unter Akademikern und Experten recht hoher Beliebtheit – auch weil Adagrad auch nicht differenzierbare Funktionen optimieren kann.

Ein Nachteil des Adagrad-Algorithmus ist, dass die Lernraten immer kleiner werden. Mit fortschreitendem Training erreichen sie irgendwann null, und das Training ist beendet.

image AdamOptimizer: Das ist der Porsche unter den Optimierern.

Üblicherweise beginne ich mit ihm, vor allem, wenn ich mit Bilddaten arbeite. Nur wenn ich Neulingen Code erkläre, greife ich manchmal auf den GradientDescentOptimizer zurück, da er dank seines einfachen Aufbaus niemandem Angst einjagt.

Analyse von Systemen mittels Regression

Eines der leistungsfähigsten statistischen Verfahren ist die Regressionsanalyse. Die Regres­sion analysiert ein System, indem sie die Beziehungen zwischen seinen Variablen erfasst. TensorFlow bietet diverse Hilfsmittel für derartige Analysen. Dieses Buch konzentriert sich auf vier Arten der Regression:

image Lineare Regression: Suche nach einer passenden Geraden für die Datenpunkte eines Datensatzes

image Polynomielle Regression: Suche nach einem passenden Polynom für die Datenpunkte eines Datensatzes

image Binäre logistische Regression: Zuordnung von Datenpunkten zu einer von zwei Kategorien

image Multinomiale logistische Regression: Zuordnung von Datenpunkten zu einer von mehreren Kategorien

Backpropagation

Backpropagation, auch als Rückpropagierung bekannt, ist ein essenzielles Verfahren für das Training von neuronalen Netzen. Im Wesentlichen erweitert das Verfahren die Optimierungsalgorithmen auf neuronale Netze. Dazu sind sechs Schritte nötig:

1.Initialisierung der Gewichte des Netzes

2.Berechnung von y(xi) für die Menge an Eingaben xi

3.Bestimmung des Verlusts für die Menge an Eingaben xi

4.Berechnung der partiellen Ableitung des Verlusts für jedes Gewicht

5.Aktualisierung der Gewichte im Netz mithilfe der in Schritt 4 berechneten partiellen Ableitungen

6.Rückkehr zu Schritt 2 und Fortsetzung des Verfahrens, bis die partiellen Ableitungen des Verlusts sich null annähern

Feinabstimmung des neuronalen Netzes

Um die Genauigkeit und Verarbeitungsgeschwindigkeit ihrer Programme zu verbessern, nutzen professionelle Entwickler spezielle Routinen, die unter dem Begriff Feinabstimmung beziehungsweise Tuning zusammengefasst werden. Für mich sind dies »die vier -Ierungen«:

image Standardisierung der Eingaben: Eingaben werden so vorbereitet, dass sie denselben Mittelwert und dieselbe Standardabweichung wie die Trainingsdaten haben. Diese Standar­disierung wird in TensorFlow durch zwei Funktionen im tf.nn-Paket unterstützt: moments und batch_normalization.

image Initialisierung der Gewichte: Geeignete Werte für die Anfangsgewichte werden bestimmt. Es gibt verschiedene Verfahren. TensorFlow unterstützt diese Verfahren mit Funktionen im tf.contrib.keras.initializers-Paket.

image Normalisierung der Batches: Wenn der Ausgabewert eines Knotens einen Extremwert erreicht und die Steigung gegen null geht, kann das Problem der Sättigung auftreten. Wird ein Gradientenabstiegsverfahren genutzt, resultiert die geringe Steigung in langsamen Trainingsabläufen. Daten werden deshalb in allen Schichten – ähnlich wie bei der Standardisierung der Eingaben – vorverarbeitet, um die Sättigungswahrscheinlichkeit zu verringern. Zur Implementierung der Normalisierung in Programmen bietet TensorFlow tf.contrib.layers.batch_norm.

image Regularisierung: Wenn Ihr Netz zu viele Knoten hat, passt es sich zwar sehr gut dem vorgelegten Trainingsdatensatz an, ist aber nicht mehr in der Lage, allgemeinere Daten zu analysieren. Man spricht von Überanpassung – und das ist eine richtig harte Nuss beim maschinellen Lernen. Das Gegenmittel ist die Regularisierung. Forscher haben zahlreiche Methoden zur Regularisierung von Netzen ersonnen; zwei davon sind:

Dropout: Einige zufällig ausgesuchte Knoten werden aus dem Netz entfernt.

In TensorFlow können Sie eine Dropout-Komponente für ein neuronales Netz durch Hinzufügen einer Dropout-Schicht konfigurieren. Dazu muss die tf.nn.dropout-Funktion aufgerufen werden.

L1-/L2-Regularisierung: Die Bedeutung einzelner Gewichte wird gezielt verringert. Dabei nimmt man zwar in Kauf, dass sich der Verlust vergrößert, erhofft sich aber eine größere Flexibilität des Modells.

In TensorFlow können Sie die L1-/L2-Regularisierung durch Aufruf von tf.contrib.layers.l1_regularizer oder tf.contrib.layers.l2_regularizer ­vornehmen.

Titelei

WILEY-VCH Verlag GmbH & Co. KGaA

TensorFlow für Dummies

Matthew Scarpino

Übersetzung aus dem Amerikanischen von Simone Linke

Bibliografische Information der Deutschen Nationalbibliothek

Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.

© 2018 WILEY-VCH Verlag GmbH & Co. KGaA, Weinheim

Original English language edition TensorFlow For Dummies © 2018 by Wiley Publishing, Inc.All rights reserved including the right of reproduction in whole or in part in any form. This translation ­published by arrangement with John Wiley and Sons, Inc.

Copyright der englischsprachigen Originalausgabe TensorFlow For Dummies © 2018 by Wiley Publishing, Inc.Alle Rechte vorbehalten inklusive des Rechtes auf Reproduktion im Ganzen oder in Teilen und in jeglicher Form. Diese Übersetzung wird mit Genehmigung von John Wiley and Sons, Inc. publiziert.

Wiley, the Wiley logo, Für Dummies, the Dummies Man logo, and related trademarks and trade dress are trademarks or registered trademarks of John Wiley & Sons, Inc. and/or its affiliates, in the United States and other countries. Used by permission.

Wiley, die Bezeichnung »Für Dummies«, das Dummies-Mann-Logo und darauf bezogene Gestaltungen sind Marken oder eingetragene Marken von John Wiley & Sons, Inc., USA, Deutschland und in anderen Ländern.

Das vorliegende Werk wurde sorgfältig erarbeitet. Dennoch übernehmen Autoren und Verlag für die Richtigkeit von Angaben, Hinweisen und Ratschlägen sowie eventuelle Druckfehler keine Haftung.

Coverfoto: ktsdesign – stock.adobe.com

Korrektur: Claudia Lötschert, Neuss

Satz/ePub: Reemers Publishing Services GmbH, Krefeld

Print ISBN: 978-3-527-71547-3

ePub ISBN: 978-3-527-81896-9

Über den Autor

Matthew Scarpino ist seit rund zwanzig Jahren als Programmierer und Ingenieur tätig. Er widmet sich insbesondere der Entwicklung von neuronalen Netzen zur Bilderkennung sowie dem Entwurf von Schaltkreisen zur Modellierung der menschlichen Wahrnehmung für die Forschungsabteilung des US-Verteidigungsministeriums (Defense Advanced Research Projects Agency, kurz DARPA). Derzeit ist er außerdem leitender Entwickler bei Plutocracy.com, einer Website, die mithilfe von maschinellen Lernalgorithmen Börsenprognosen erstellt.

Seit 2018 besitzt er die Zertifizierung als Google Certified Data Engineer. In seiner Freizeit programmiert er Roboter und schreibt Blogartikel zu TensorFlow unter http://tfblog.com/.

Widmung

Dieses Buch ist Frank Rosenblatt gewidmet, einem Pionier auf dem Gebiet der künstlichen Intelligenz. Wenngleich seine Zeitgenossen ihn als verträumten Akademiker ignorierten, haben moderne Entwicklungen seine kühnsten Vorhersagen nicht nur bestätigt, sondern sogar noch übertroffen.

Danksagung des Autors

Ende der 1990er fiel mir in einer Universitätsbuchhandlung C für Dummies in die Hände, und ich war sofort hin und weg. Die Erklärungen von Dan Gookin zur Programmiersprache C waren leicht zu verstehen und gar unterhaltsam! Ich verbrachte viele kurzweilige Stunden damit, seinen ausgefallenen Erläuterungen zu folgen und seine skurrilen Programmierbeispiele Schritt für Schritt selbst zu testen.

Als Autor ist mir Dan Gookin natürlich um Längen voraus, aber dank meiner Chefredakteurin Katie Mohr darf ich mich nun ebenfalls in die Reihe der Dummies-Autoren einordnen. Obwohl ich sie mit unzähligen Anfängerfragen zu Kapitelstrukturen und zu Schriftarten in Tabellen und zur korrekten Formatierung von Gleichungen bombardiert habe, blieb Katie stets die Ruhe in Person und hat all meine Fragen kompetent und freundlich beantwortet. Dafür vielen Dank!

Auch Kelly Ewing hat in ihrer Funktion als verantwortliche Redakteurin für dieses Buchprojekt hervorragende Arbeit geleistet. Ihr geschulter Blick fürs Detail und ihre vielen Verbesserungsvorschläge haben enorm zur Qualität und Lesbarkeit dieses Buchs beigetragen. Außerdem danke ich ihr für ihre Geduld und Unterstützung, als ich mich anfangs mit den redaktionellen Kriterien der Dummies-Reihe doch recht schwergetan habe.

Guy Hart-Davis hat das Buch inhaltlich geprüft und seine langjährigen Erfahrungen als Autor in wertvollen Anregungen einfließen lassen. Aufgrund seines Feedbacks habe ich viele Absätze umformuliert, um das Zusammenspiel von TensorFlow und maschinellem Lernen verständlicher zu erklären. Und ich muss zugeben, Guy hat mehr inhaltliche Fehler in meinem Manuskript entdeckt, als mir lieb ist. Tausend Dank, Guy!

Zu guter Letzt gilt mein Dank auch meinem talentierten Agenten Matt Wagner. Von meinen ersten Ideen bis hin zum veröffentlichten Buch hat er mir abwechselnd als Berater, Lektor, Agent und Diplomat zur Seite gestanden. Trotz seines vollen Terminkalenders und zahlreicher anderer Projekte fand er immer die nötige Zeit, um meine Fragen zu beantworten und mir eventuelle Bedenken zu nehmen. Herzlichen Dank!

Einführung

Maschinelles Lernen gehört zu den spannendsten und wichtigsten technologischen Ansätzen unserer modernen Welt. Die US-amerikanische Raumfahrtbehörde NASA beispielsweise nutzt maschinelle Lernalgorithmen, um Teleskopbilder auszuwerten und neue Planeten in den Tiefen des Weltalls aufzuspüren. Auch Google testet die vielversprechenden Möglichkeiten dieses Ansatzes. Sein AlphaGo-Programm beherrschte nach einem nur dreitätigen Training das komplizierte Brettspiel Go und besiegte einen der weltbesten Profispieler.

Trotz des enormen Potenzials machen sich bisher jedoch nur wenige Programmierer das maschinelle Lernen zunutze. Dies liegt nicht zuletzt daran, dass die Programmierung einer Anwendung für maschinelles Lernen eine gänzlich neue Denkweise erfordert. Es geht nicht mehr darum, ein spezifisches Problem zu lösen, sondern es soll eine Anwendung entwickelt werden, die ein zum Zeitpunkt der Programmierung noch unbekanntes Problem später selbstständig lösen kann.

Die Methoden des maschinellen Lernens vereinen verschiedene Fachbereiche der Mathematik, unter anderem die Statistik, die Analysis, die lineare Algebra und die Optimierung. Bedauerlicherweise hält sich unsere reale Welt aber nicht immer an mathematische Gesetzmäßigkeiten. Selbst ein gut durchdachtes mathematisches Modell liefert im ungünstigen Fall nur lausige Ergebnisse. Das ist natürlich frustrierend und hat mich schon oft genug dazu verleitet, neuronale Netze verärgert als »Hightech-Scharlatanerie« abzustempeln.

TensorFlow bietet zwar auch kein perfektes Modell, ermöglicht jedoch eine deutlich schnellere und weniger nervenaufreibende Entwicklung von maschinellen Lernprogrammen. Statt Aktivierungsfunktionen und Normalisierungsroutinen mühsam von Grund auf neu zu programmieren, können Sie auf zahlreiche integrierte Funktionen des Frameworks zurückgreifen. TensorFlow für Dummies erklärt, wie Sie diese Funktionen richtig einsetzen.

Über dieses Buch

Möchte man als Autor ein Buch über TensorFlow schreiben, steht man vor gewissen Herausforderungen. Die Programmbibliothek umfasst Tausende Klassen, die jedoch häufig ähnliche Aufgaben erfüllen. Erschwerend kommt hinzu, dass manche Klassen inzwischen offiziell als überholt gelten, während bei anderen zumindest inoffiziell von der Nutzung abgeraten wird.

In dieser Fülle an Klassen gibt es aber drei, mit denen jeder TensorFlow-Entwickler unbedingt vertraut sein sollte: Tensor, Graph und Session. Teil I dieses Buchs stellt diese Klassen im Detail vor und veranschaulicht ihre Nutzung mithilfe zahlreicher Beispiele.

Teil II erklärt, wie Sie mit TensorFlow praktische Aufgaben des maschinellen Lernens bewältigen. Dazu schauen wir uns zunächst statistische Methoden wie die lineare Regression, die polynomielle Regression und die logistische Regression an. Danach widmen wir uns den äußerst faszinierenden neuronalen Netzen. Sie lernen die grundlegende Funktionsweise dieser Netze kennen und erhalten einen Überblick zu konvolutionellen neuronalen Netzen sowie zu rekurrenten neuronalen Netzen.

Teil III konzentriert sich auf komplexe TensorFlow-Klassen, mit deren Hilfe Sie Ihre Programme vereinfachen und beschleunigen können. Besonderes Augenmerk legen wir dabei auf die Estimator-API, die es Ihnen ermöglicht, mit minimalem Programmieraufwand sehr leistungsstarke maschinelle Lernalgorithmen zu implementieren. Sie erfahren außerdem, wie Sie Schätzer programmieren und über die Google Cloud Platform (GCP) mit hoher Geschwindigkeit ausführen.

Törichte Annahmen über die Leser

Im Wesentlichen behandelt dieses Buch zwei Themenbereiche: die theoretischen Grundlagen des maschinellen Lernens und die praktische Implementierung mit TensorFlow. Was die Theorie angeht, so wird eine gewisse Vertrautheit mit der linearen Algebra vorausgesetzt. Es ist jedoch nicht schlimm, wenn Sie noch keine Kenntnisse zum maschinellen Lernen besitzen. Auch über die statistische Regression oder neuronale Netze müssen Sie noch nichts wissen – zu diesen und weiteren Konzepten erhalten Sie eine umfassende Einführung.

Zur Implementierung von TensorFlow benötigen Sie Grundkenntnisse in der Programmierung. Da TensorFlow zwar mehrere Programmiersprachen unterstützt, im Kern aber auf Python basiert, konzentriert sich auch dieses Buch auf Python, und alle Beispiele sind in Form von Python-Modulen gegeben. Die Installation von TensorFlow und der Zugriff auf seine Module und Klassen werden ausführlich erläutert. Es wird aber darauf verzichtet zu erklären, was Module und Klassen überhaupt sind.

Symbole, die in diesem Buch verwendet werden

Verschiedene Symbole am Seitenrand sollen Sie beim Durcharbeiten dieses Buchs unterstützen. Folgende Symbole gibt es:

Ein Absatz, der mit diesem Symbol gekennzeichnet ist, enthält nützliche Hinweise zur Entwicklung von maschinellen Lernprogrammen.

Dieses Symbol markiert Textstellen, die näher auf die theoretischen Zusammenhänge beim maschinellen Lernen eingehen. Manche Leser werden dies sicherlich interessant finden, aber Sie müssen sich keineswegs jedes noch so kleine Detail merken.

So hilfreich TensorFlow auch sein mag, rein intuitiv nutzen lässt sich das Tool leider nicht. Dieses Symbol hebt daher besonders wichtige Aspekte hervor, mit denen Sie unbedingt vertraut sein sollten, wenn Sie das Potenzial von TensorFlow künftig optimal ausschöpfen wollen.

Über das Buch hinaus

Dieses Buch behandelt die API von TensorFlow zwar sehr ausführlich, kann aber natürlich nicht auf jedes Detail eingehen. Wenn Sie mehr zu einem bestimmten Thema erfahren möchten, sollten Sie zuerst einen Blick in die offizielle Dokumentation werfen. Diese finden Sie unter http://www.tensorflow.org/ (aktuell nur auf Englisch). Die Funktionen und Datenstrukturen von TensorFlow werden dort unter http://www.tensorflow.org/api_docs genauer vorgestellt.

Bei Fragen oder Problemen, die sich nicht mit diesem Buch oder der offiziellen Dokumentation klären lassen, ist StackOverflow eine geeignete Anlaufstelle. Auf diesem Portal stellen Programmierer Fragen und die Community antwortet – eine sehr empfehlenswerte Ressource! Fragen spezifisch zu TensorFlow sind per Schlagwort gruppiert und unter http://www.stackoverflow.com/questions/tagged/tensorflow zu finden.

Zur praktischen Veranschaulichung der theoretischen Erläuterungen in diesem Buch gibt es außerdem diverse Programmbeispiele. Diese können Sie sich unter http://www.wiley-vch.de/ISBN9783527715473 als .zip-Datei herunterladen.

Nach dem Entpacken des Archivs sind die Programmbeispiele in Unterordnern nach Kapitel sortiert. Den Code aus Kapitel 3 finden Sie beispielsweise im Unterordner ch3, den Code aus Kapitel 6 im Unterordner ch6 und so weiter.

Wie es weitergeht

Dieses Buch taucht Kapitel für Kapitel immer tiefer in die Materie ein. Falls Sie schon mit TensorFlow vertraut sind, können Sie gern die Ihnen bereits bekannten Inhalte überspringen. Falls Sie hingegen die ersten Schritte mit dem Tool wagen, sollten Sie unbedingt mit Kapitel 1 beginnen und die nachfolgenden Kapitel der Reihe nach durcharbeiten.

Eine spannende neue Themenwelt wartet darauf, von Ihnen erkundet zu werden. Bon voyage!

Teil I

Erste Schritte mit TensorFlow