Deep Learning mit TensorFlow, Keras und TensorFlow · Machine Learning und Deep Learning »Wahrlich...

36

Transcript of Deep Learning mit TensorFlow, Keras und TensorFlow · Machine Learning und Deep Learning »Wahrlich...

29

2

Kapitel 2

Machine Learning und Deep Learning

»Wahrlich es ist nicht das Wissen, sondern das Lernen, nicht das

Besitzen, sondern das Erwerben, nicht das Da-Seyn, sondern das

Hinkommen, was den grössten Genuss gewährt.«

– Carl Friedrich Gauß

Das Gebiet der Künstlichen Intelligenz (KI) hat sich zum Ziel gesetzt, Systeme zu er-

forschen und zu entwickeln, die in einigen Bereichen mindestens die gleiche Perfor-

manz wie der menschliche Experte vollbringen. Diese Systeme bearbeiten Aufgaben,

für deren Lösung der Mensch seinen Verstand und sein Wissen benötigt, damit die so

erreichte Leistung als intelligent empfunden werden kann.

2.1 Einführung

Im Gegensatz zur klassischen Vorgehensweise in der Programmierung, bei der die

Verarbeitung durch Menschen komplett programmiert werden muss, beruht dieses

Paradigma darauf, dass das Wissen des Menschen computergerecht aufbereitet in

den Computer übertragen wird und dass der Computer eigene Schlussfolgerungen

aus diesem Wissen ziehen kann (siehe Abbildung 2.1). Dieses Prinzip nennt man in

der KI wissensbasierte Verarbeitung. Man spricht auch von einem symbolischen An-

satz. Während bei Ersterem der Programmierer der »Flaschenhals« ist, weil viel Ent-

wicklungsbedarf und aufwendige Adaption an neue Gegebenheiten entstehen kön-

nen, zeichnen sich wissensbasierte Systeme durch hohen Entwicklungsbedarf und

Pflegeaufwand, aber auch prinzipiell durch eine gute Erklärungsfähigkeit aus.

Wissensbasierte Systeme kann man in regelbasierte und fallbasierte Systeme unter-

teilen. Regelbasierte Systeme charakterisieren sich durch eine klare Trennung zwi-

schen Repräsentation und Verarbeitung von Wissen.

� Bei regelbasierten Systemen steht die konkrete Repräsentation von Wissen und

dessen Verarbeitung im Vordergrund. Ein regelbasiertes System besteht aus einer

Wissensbasis und einer Inferenzmaschine (engl. inference engine). Während die

Wissensbasis die Datenbasis bzw. Faktenbasis und die Regelbasis beinhaltet, steu-

ert die Inferenzmaschine durch Anwendung der Regeln (Schlussfolgerung) die

6509.book Seite 29 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

30

Ableitung neuer Fakten für die Wissensbasis. Regeln bestehen aus Prämissen

(Wenn-Teil) und aus Konklusion (Dann-Teil).

Ein möglicher Flaschenhals hierbei ist einerseits die Definition der Regeln, die ein

tiefes Domänenwissen erfordert, und andererseits die Entwicklung von Meta-

regeln für den Fall, dass mehrere Regeln anwendbar sind oder sich gar wider-

sprechen. Die in den 1980er-Jahren populär gewordenen Expertensysteme sind

prominente Beispiele für diesen rein wissensbasierten KI-Ansatz, die durchaus

kommerzielle Erfolge aufweisen können. Dennoch wurden die Beschränkungen

auch schnell deutlich: Der manuelle Aufbau und die Pflege der Wissensbasen stel-

len einen limitierenden und kostentreibenden Faktor dar.

� Bei fallbasierten Systemen verwendet man Case-Based Reasoning (fallbasiertes

Schließen), ein Problemlösungsparadigma, das auf der Wiederverwendung von

Erfahrungswissen zur Lösung neuer Probleme basiert. Die Methodik baut auf Ana-

logie auf und beruht auf der Annahme, dass ähnliche Probleme ähnliche Lösun-

gen haben. Denken Sie an medizinische Anwendungen: Hier werden ständig neue

Bilder der Patienten analysiert und von Ärzten annotiert. Nach einer gewissen Zeit

kann das System erste Anomalien automatisch erkennen. Das Case-Based Reason-

ing (CBR) folgt diesem Paradigma:

– Retrieve – Als Erstes wird nachgeschaut, ob ein Problem schon mit einer vor-

handenen Lösung gelöst werden kann.

– Reuse – Die Lösungsansätze oder Algorithmen, die zu einer Lösung geführt ha-

ben, werden wiederverwendet.

– Revise – Gefundene Lösungen werden angepasst und verbessert.

– Retain – Die beste Lösung wird gespeichert.

Folglich können bereits bekannte Lösungen zu bestimmten Problemen wieder-

verwendet werden. Das Erfahrungswissen wird in Form von sogenannten Fällen in

einem Problemlösungsgedächtnis, der Fallbasis, abgelegt, in die jede neu gemach-

te Erfahrung als zusätzlich gewonnenes Wissen integriert wird. Mithilfe dieser

Wissensbasis werden Inferenzen aus den vorhandenen Erfahrungen abgeleitet.

Seit ein paar Jahren ist in der KI ein weiterer Ansatz sehr verbreitet und populär ge-

worden: Maschinelles Lernen (ML), ein Gebiet der Künstlichen Intelligenz. Die Grund-

idee des ML ist: Aus Beispielen werden z. B. Regelmäßigkeiten, Muster oder Modelle

extrahiert (sprich: gelernt), mit deren Hilfe man neue Daten klassifizieren oder künf-

tige Werte vorhersagen kann. KI-Systeme, die auf ML basieren, werden empirisch

mithilfe von Beispielen bzw. Daten trainiert (siehe Abbildung 2.1). Man spricht auch

von einem subsymbolischen Ansatz. Nach Beendigung dieser Lernphase entstehen

Modelle, die die bisher gesehenen Beispiele durch Erkennung von Mustern, Bezie-

hungen und Regelmäßigkeiten in den vorliegenden Daten verallgemeinern, sodass

6509.book Seite 30 Montag, 1. April 2019 5:40 17

2.1 Einführung

31

2

unbekannte Daten korrekt verarbeitet werden können. Dadurch werden neue Pro-

blemlösungen eigenständig gefunden.

Abbildung 2.1 Computerprogramme, Wissensverarbeitung und maschinelles Lernen

(Quelle: Grafisch adaptiert, Vortrag von Professor Wahlster – www.dfki.de/wwdata/

Gutenberg_Stiftungsprofessur_Mainz_2017/Lernende_Maschinen.pdf )

Bei diesem Ansatz des Lernens durch Beispiele werden aus einer Menge von Bei-

spielen (den sogenannten Trainingsinstanzen) Modelle induziert, die möglichst alle

Beispiele abdecken. Hierzu werden mathematische und statistische Verfahren ver-

wendet, um aus den Datasets zu lernen. Anwendungsbeispiele hierfür sind: Sprach-

erkennung, Sprachübersetzung, automatische Erkennung und Sortierung von Ad-

ressen bei handbeschrifteten Briefumschlägen, Fraud-Detection, automatisierte

Diagnose z. B. aus CT-Aufnahmen etc.

Wie Sie später in diesem Buch sehen werden, zeichnen sich ML-Systeme aktuell

durch einen relativ geringen Entwicklungsaufwand und eine leichte Anpassbarkeit

aus. Ihre Nachteile sind jedoch ein großer Datendarf sowie eine schlechte Erklärungs-

fähigkeit bezüglich der gefundenen Lösungen.

Es existieren viele ML-Verfahren (Entscheidungsbäume, Random Forest, Support

Vector Machines [SVM], Boosting-Verfahren, k-Means, bayessche und genetische Al-

gorithmen etc.). In diesem Buch legen wir das Augenmerk auf Deep Learning, eine

Spezialform des maschinellen Lernens, die wiederum ein Teilgebiet der Künstlichen

Intelligenz ist. Deep Learning (tiefes Lernen) basiert auf sogenannten künstlichen

neuronalen Netzen, die im nächsten Kapitel ausführlich vorgestellt werden, und auf

der Verfügbarkeit großer Datasets sowie hoher Rechenleistung zum Trainieren kom-

plexer neuronaler Netze. (Die Rechenleistung wird durch den zunehmenden Einsatz

von GPUs zur Verfügung gestellt oder sogar von den neuerdings durch Google ent-

wickelten TPUs, Tensor Processing Units. Das sind Hardware-Chips, die eine massive

Eingabe Eingabe Eingabe

Computer-programm

Wissens-verarbeitung

MaschinellesLernen

Ausgabe Ausgabe Ausgabe

Implementierung Wissensbasis Datenbasis

AlgorithmusHeuristiken

SucheInferenzPlanung

Merkmals-extraktion,

Mustererkennung

Fakten,Regeln

Trainingsdaten,Testdaten,Metadaten

for(var i=0;i<process(data)data.analyse()

6509.book Seite 31 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

32

Parallelverarbeitung ermöglichen.) Mehr zu diesem Thema werden Sie in Kapitel 3,

»Neuronale Netze«, und Kapitel 5, »TensorFlow«, erfahren.

Das Adjektiv »deep« ergibt sich daraus, dass der zugrunde liegende Lernprozess mit-

hilfe von tiefen (sprich: mehrschichtigen) neuronalen Netzen erfolgt. Bei den heu-

tigen Systemen kann durchaus mit Netzen mit mehr als 100 Schichten gearbeitet

werden. Durch diesen Ansatz sind in den letzten Jahren große Fortschritte erzielt

worden, unter anderem in den Bereichen Spracherkennung, maschinelle Überset-

zung, autonomes Fahren, Computer Vision (maschinelles Sehen), radiologische Dia-

gnostik (siehe Kapitel 1, »Einführung«), Industrie 4.0, Brett- und Kartenspiele etc. Sie

erinnern sich sicherlich an die Schlagzeilen, als AlphaGo, ein System der Google-

Tochterfirma DeepMind, die Go-Großmeister Lee Sedol 2016 und Ke Jie 2017 bei me-

dienwirksamen Events geschlagen hat!

Die Vorgehensweise bei allen Machine- und Deep-Learning-Projekten ist im Prinzip

gleich, wie prototypisch im Workflow der Abbildung 2.2 dargestellt:

1 Als Erstes soll sichergestellt werden, dass Daten zur Verfügung stehen und dass

diese so weit vorverarbeitet sind, dass sie für eine Modellbildung genutzt werden

können. Später werden Sie sehen, wie eine Normalisierung der Daten durchge-

führt werden kann und wie mit fehlenden Merkmalen in einigen Datasets umzu-

gehen ist.

2 Sollte das Dataset nicht in einem verwertbaren Format vorliegen, müssen eventu-

elle Konvertierungsschritte vorgenommen werden, z. B. die Umwandlung der

Daten in ein CSV- oder JSON-Format.

3 Stehen nicht genügend Daten zur Verfügung, ist zu klären, ob ein alternatives

Dataset benutzt werden kann.

4 Alternativ können die bestehenden Daten eventuell angereichert werden, etwa

mit synthetischen Daten.

5 Der Datenvorbereitungsprozess schließt mit einer finalen Analyse der Daten, etwa

auf Integrität.

6 Anschließend wird überprüft, ob bereits existierende Modelle für die definierte

Aufgabe herangezogen werden können. Sollte dies der Fall sein, kann das Modell

direkt angewendet und evaluiert werden.

7 Wenn kein vorgefertigtes Modell frei verfügbar ist, muss auf Basis der Datenana-

lyse ein erstes Modell erstellt, ...

8 … trainiert, ...

9 … und evaluiert werden.

j Dann wird überprüft, ob das Modell hinreichend verwertbar ist.

6509.book Seite 32 Montag, 1. April 2019 5:40 17

2.1 Einführung

33

2

k Wenn dies nicht der Fall ist, wird das Modell in einem iterativen Prozess angepasst

bzw. ersetzt.

l Hat man ein akzeptables Modell generiert, wird es angewandt und für künftige

ähnliche Situationen herangezogen.

Abbildung 2.2 Ablaufdiagramm eines typischen Machine-Learning-Projekts

Training

Datenanalyse

Evaluation

Modellerstellung

Modell speichern

Anpassung

Suche nach alternativen Datenquellen

Nein

Existiert bereitsein generisches Modell

für diese Aufgabe?

Datenbestandist verwertbar?

Umwandlung in maschinenlesbares Format (z.B. CSV/JSON)

Ja

Nein

Daten

Modellhinreichendverwertbar?

Modell

evtl. Erzeugungsynthetischer

Daten

Ja

Ja Nein

Ja

Nein

DAT

ENV

OR

BER

EITU

NG

MO

DEL

LDEF

INIT

ION

Nein

Datenvolumenausreichend?

5

4

1

2

3

67

8

9

j

k

l

6509.book Seite 33 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

34

2.2 Lernansätze bei Machine Learning

Die Lernverfahren zur Erstellung von Machine-Learning-Modellen können entlang

von zwei Dimensionen eingeordnet werden:

� Lernmodus – Mit welchem Ansatz soll das Modell trainiert werden? Hierbei exis-

tieren fünf Kategorien von Lernmodi, die das Lernen durch Beispiele als Grund-

lage unterstützen:

– Überwachtes Lernen (Supervised Learning)

– Unüberwachtes Lernen (Unsupervised learning)

– Teilüberwachtes Lernen (Semi-supervised Learning)

– Bestärktes Lernen (Reinforcement Learning)

– Aktives Lernen (Active Learning)

� Typ des zu lösenden Problems

– Regression (Vorhersage von kontinuierlichen Werten, z. B. Preisentwicklung,

Aktienkurse)

– Klassifikation (Einordnung von Daten nach vorgegebenen Gruppenbezeich-

nungen [Labels], z. B. für die Personen- und Objekterkennung)

– Clustering (Gruppierung von Daten nach nicht vorgegebenen Bezeichnungen)

Wir präsentieren in diesem Abschnitt die verschiedenen Begriffe und zeigen, welche

Aufgaben mit welchem Lernansatz vorzugsweise bearbeitet werden können.

2.2.1 Supervised Learning

Beim Supervised Learning (dt. überwachten Lernen) wird einem System vorgeben, was

es lernen soll, z. B. dass es einen bestimmten Gegenstand oder Sachverhalt in Bildern

oder Videos erkennen soll. So kann etwa ein System lernen, Krebszellen von gesun-

den Zellen zu unterscheiden, Hunde von Katzen zu unterscheiden oder Verkehrs-

schilder zu erkennen etc.

Charakteristisch bei diesem Lernmodus ist, dass die präsentierten Beispiele anno-

tiert (gelabelt) sind, also als Trainingspaare durch Eingabe mit korrespondierender

Ausgabe dargestellt sind. Konkret heißt das, dass für jede Eingabe die richtige Ant-

wort vorliegt. Ausgehend von diesen annotierten Beispielen soll nun ein Modell ge-

lernt werden, das automatisch für jede neue präsentierte Eingabe die möglichst kor-

rekte Ausgabe liefert. Es wird also rückgemeldet, ob die Eingabe korrekt oder falsch

bearbeitet wurde. Darüber hinaus wird auch gegebenenfalls quantifiziert, wie weit

man sozusagen daneben liegt, und dies dem System zurückgemeldet, damit es sich

korrigieren bzw. anpassen kann. Dieser Anpassungsprozess läuft so lange, bis die

Beispiele in akzeptabler Weise korrekt bearbeitet werden oder bis keine Verände-

6509.book Seite 34 Montag, 1. April 2019 5:40 17

2.2 Lernansätze bei Machine Learning

35

2

rung mehr zu erwarten ist. Diese schrittweise Anpassung ist das eigentliche Lernen.

Dieses Lernen bezieht sich auf die Arbeitsweise des gesamten künstlichen neurona-

len Netzes.

In Abhängigkeit von den betrachteten Typen der Ein-/Ausgabepaare ergeben sich

drei Aufgabentypen:

� Klassifikation

Hier besteht die Aufgabe darin, die Klassenzugehörigkeiten von Beispielen vor-

herzusagen, also die Abbildung von Merkmalen in einen diskreten Wertebereich,

der die Klassen bzw. Labels repräsentiert. Die besagten Klassen sind schon bei der

Trainingsphase bekannt. Beispiele von Klassifikationsaufgaben sind z. B. die Kate-

gorisierung einer E-Mail durch den Spam-Filter als Spam oder Nicht-Spam, die

Vorhersage einer potenziellen Kündigung durch einen Kunden (Churn) oder die

Kreditausfallvorhersage.

� Regression

Bei Regressionsaufgaben werden kontinuierliche Werte vorhergesagt, im Gegen-

satz zu den diskreten Werten der Klassifikationsaufgaben, die die zu erkennenden

Klassen repräsentieren. Hierzu gibt es verschiedene statistische Methoden, die

alle darauf abzielen, die Beziehung zwischen einer (vorherzusagenden) Variablen

und einer oder mehreren anderen Variablen zu analysieren.

Beispiele hierfür sind z. B.:

– die Prognose von Preisentwicklungen

– die Vorhersage von verbrannten Flächen bei Waldbränden in Abhängigkeit von

Einflussgrößen wie z. B. Windgeschwindigkeit, Jahreszeit, Temperatur und Luft-

feuchtigkeit

– die Vorhersage der elektrischen Leistung, die von Photovoltaik- oder Wind-

kraftanlagen erzeugt wird, in Abhängigkeit von meteorologischen Daten wie

Temperatur, Sonneneinstrahlung, Windgeschwindigkeit und -richtung

– die Vorhersage des elektrischen Energieverbrauchs von privaten Haushalten

oder gewerblichen Gebäuden

Einen Spezialfall stellt die logistische Regression dar, die auch für Klassifikations-

aufgaben genutzt werden kann. Sie ermöglicht es z. B., anhand diverser Merkmale

die Wahrscheinlichkeit zu ermitteln, dass jemand Träger einer bestimmten Krank-

heit ist oder wird. Das ist letztlich auch eine Regression mit dem Ergebnis 0 oder 1.

� Zeitreihen

Bei Zeitreihen werden künftige Werte vorhergesagt, basierend auf den vergan-

genen Werten. Eine Zeitreihe ist eine zeitlich geordnete Reihe von Werten, z. B. Ak-

tienkurse oder Preise auf dem Energiemarkt. Da Zeitreihen nicht zufällig entste-

hen, sondern die Historie aus den vergangenen Prozessen reflektieren, geht man

6509.book Seite 35 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

36

davon aus, dass ihnen bestimmte Strukturen inhärent sind, die etwa für Wetter-

vorhersage, Aktien-, Preis- und Trendvorhersagen genutzt werden können. Die

Zeitreihenanalyse ist im Grunde eine Form der oben beschriebenen Regression.

2.2.2 Unsupervised Learning

Beim Unsupervised Learning (dt. unüberwachten Lernen) geht es darum, die vorhan-

denen Daten zu explorieren und die inhärenten strukturellen Eigenschaften bzw.

Ähnlichkeiten zu identifizieren. Dabei sind die Beispiele nicht vorannotiert. Dies ist

oft der Fall bei großen, unstrukturierten Datenmengen. Das System muss dann ohne

vorher definierte Ausgabewerte die präsentierten Beispiele strukturieren und die

vorhandenen Muster erkennen, um beispielsweise sie in homogene Gruppen (Clus-

ter) einzuordnen. Diese Technik zum Auffinden von Ähnlichkeitsgruppen in Daten –

den Clustern – nennt man Clustering.

Im Gegensatz zu Klassifikationsaufgaben, bei denen die Kategorien im Vorfeld be-

kannt sind, werden bei Clusteringaufgaben neue, nicht a priori bekannte Gruppen

aus den Daten entdeckt. Beispiele hierfür ist die Kunden- oder Marktsegmentierung,

um marketingrelevante Zielgruppen zu identifizieren.

Gut zu wissen: Unsupervised Learning und Clustering

Oft werden Unsupervised Learning und Clustering als Synonyme betrachtet. Es gibt

aber durchaus andere Verfahren, die ebenfalls dem Gebiet Unsupervised Learning

zugeordnet werden können – etwa aus dem Bereich Data Mining die Assoziations-

analyse (engl. association rule mining), eine Methode zur Suche nach Regeln, die Kor-

relationen zwischen Objekten beschreiben. Beispielsweise könnte aus der Analyse

von Einkaufszetteln in den Supermärkten eine Regel folgender Art aufgedeckt wer-

den: »Wer eine große Packung Eier kauft, wird mit einer Wahrscheinlichkeit von 85 %

auch (pasteurisierte) Milch kaufen.«

2.2.3 Semi-supervised Learning

Semi-supervised Learning (dt. semi-überwachtes Lernen) ist eine Mischform von über-

wachtem und nicht-überwachtem Lernen. Es zeichnet sich durch die gemischte Ver-

wendung von gelabelten und nicht annotierten Datasets aus. Typischerweise liegen

weniger gelabelte als ungelabelte Daten vor, da das Annotieren von Daten relativ

kostspielig ist. Der Ansatz läuft typischerweise in zwei Schritten ab: Man trainiert zu-

erst mit den annotierten Daten und setzt dann die nicht annotierten ein, um die

Lernperformanz zu verbessern.

6509.book Seite 36 Montag, 1. April 2019 5:40 17

2.2 Lernansätze bei Machine Learning

37

2

2.2.4 Reinforcement Learning

Beim Reinforcement Learning (dt. bestärkenden Lernen) werden die richtigen Aktio-

nen bzw. Antworten belohnt (engl. rewards) und die falschen Antworten bzw.

schlechten Aktionen »bestraft«. DeepMinds faszinierende automatisierte Atari-Spie-

le oder Googles AlphaGo verwenden Reinforcement Learning.

Auch sehr beliebt ist das Reinforcement Learning bei WissenschaftlerInnen, um Vi-

deospiele automatisch anzusteuern und somit die höchste Punkteanzahl zu errei-

chen. Während des Spielens werden Tastenkombinationen ausgelöst und je nach-

dem, wie sich der Spielcharakter (Avatar) bewegt oder auf Gegenstände bzw. Gegner

stößt, wird der Score ausgewertet (Monitor). Somit lernt das Programm (Agent), wel-

che Tastenkombination in welchem Moment ausgelöst werden muss (Policy). Dabei

entsteht ein präzises Modell des Spiels. Ein bekanntes Beispiel von Reinforcement

Learning in Zusammenhang mit Videospielen ist das Projekt Mario-AI1, das Sie in Ab-

bildung 2.3 sehen.

Abbildung 2.3 Bildschirmauszug von Mario-AI: Die einzelnen Pixelbereiche werden wäh-

rend des Spiels analysiert, und aus dieser Analyse wird ein Modell erstellt.

AlphaGo ist ebenfalls ein prominenter Repräsentant des Reinforcement Learning. Go

(siehe Abbildung 2.4) ist ein Strategiespiel, das viel komplexer als Schach ist. Bei Go

sind die Kombinationsmöglichkeiten astronomisch hoch: Es existieren nämlich

mehr, als es Atome im Universum gibt. In der neuesten Version AlphaGo Zero lernt

das Programm »from scratch« mithilfe von TensorFlow und 64 GPUs. Das initiale

System, das nur die Go-Spielregeln kannte, wurde durch Reinforcement Learning

einzig bei Spielen gegen sich selbst performanter! Es wurden dabei fürs Training

1 https://github.com/aleju/mario-ai

6509.book Seite 37 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

38

keine Partien mit Menschen herangezogen.2 AlphaZero ist die generische Weiterent-

wicklung von AlphaGo Zero, die weitere Brettspiele anhand der Spielregeln und

durch Reinforcement Learning erlernt.

Abbildung 2.4 Googles AlphaGo (Bildquelle: https://www.technologyreview.com/s/

604273/finding-solace-in-defeat-by-artificial-intelligence)

Gut zu wissen: Reinforcement Learning

Falls Sie mehr Interesse an Reinforcement Learning im Gaming-Bereich haben, soll-

ten Sie sich auf die Seite von OpenAI begeben (https://gym.openai.com). Dort wer-

den ein Framework und ein Emulator angeboten, die das Lernern vieler ATARI-Spiele-

klassiker ermöglicht.

2.2.5 Aktives Lernen

Der Vollständigkeit halber besprechen wir hier kurz das Aktive Lernen, das als inter-

aktives semi-überwachtes Lernen bezeichnet werden kann. Da Datenannotierung

kostspielig ist, können menschliche Benutzer eingebunden werden, um große Daten-

mengen zu klassifizieren.3

2 Siehe https://www.nature.com/articles/nature24270

3 Ausführliche Informationen hierzu finden Sie unter http://burrsettles.com/pub/settles.active-

learning.pdf.

6509.book Seite 38 Montag, 1. April 2019 5:40 17

2.3 Deep-Learning-Frameworks

39

2

Weiterführende Literatur zu Machine Learning

In diesem Buch wird der Schwerpunkt auf Deep Learning als Teilgebiet von Machine

Learning gesetzt. Wenn Sie sich mit Machine Learning beschäftigen möchten, ver-

weisen wir gerne auf folgende Ressourcen:

� Roland Schwaiger, Joachim Steinwendner: Neuronale Netze programmieren mit

Python. Rheinwerk Verlag, Bonn 2019.

� Christopher M. Bishop: Pattern Recognition and Machine Learning. Information

Science and Statistics. Springer-Verlag, Berlin 2008.

� Richard O. Duda, Peter E. Hart, David G. Stork: Pattern Classification. Wiley, New

York 2001.

� Nils J. Nilsson: Introduction to Machine Learning (http://robotics.stanford.edu/

~nilsson/mlbook.html).

2.3 Deep-Learning-Frameworks

Zur Umsetzung der vorgestellten Lernansätze in Deep Learning werden viele imple-

mentatorische und mathematische Hilfsmittel benötigt. Aber keine Angst, Sie müs-

sen nicht das Rad neu erfinden! Es gibt inzwischen zahlreiche Programmbibliothe-

ken, die das Arbeiten mit Deep-Learning-Methoden unterstützen. Die meisten von

ihnen sind Open Source und kostenlos erhältlich. Diese Bibliotheken bieten alle not-

wendigen Werkzeuge, um den in Abbildung 2.2 dargestellten Prozess zu unterstüt-

zen. Im Folgenden listen wir einige dieser Programmbibliotheken mit kurzen Erklä-

rungen auf:

� TensorFlow (https://www.tensorflow.org) ist die von Google unterstützte platt-

formunabhängige Programmbibliothek für Machine- und Deep-Learning-Aufga-

ben. Wir werden TensorFlow ausführlicher in Kapitel 5 vorstellen.

� Keras (https://keras.io) baut auf TensorFlow auf und bietet eine High-Level-API,

die einen leichteren Zugang ermöglicht. Inzwischen wird Keras von Google so-

wohl standalone betrieben als auch als Teil von TensorFlow. Keras kann ebenfalls

die unten beschriebene Bibliothek Theano sowie CNTK kapseln. Keras wird aus-

führlich in Kapitel 6 behandelt.

� TensorFlow.js (https://js.tensorflow.org) ist eine relativ junge JavaScript-Biblio-

thek für das Machine Learning, die die Grundkonzepte von TensorFlow und von

Keras übernimmt. Sie ermöglicht es durch eine JavaScript-basierte API, Modelle

innerhalb des Webbrowsers anzutrainieren bzw. zu benutzen. Dieses Framework

wird ausführlich in Kapitel 8 präsentiert.

� Scikit-learn (http://scikit-learn.org) fungiert nicht speziell als Deep-Learning-Bi-

bliothek, sondern eher als freies Machine-Learning-Framework für die Sprache

6509.book Seite 39 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

40

Python. Es wird als Python-Bibliothek integriert und bietet zahlreiche ML-Algo-

rithmen wie Regression, Klassifikation und Clustering. Darüber hinaus bietet

Scikit-learn Funktionalitäten für Datenvorverarbeitung, Dimensionalitätsreduk-

tion und Modellauswahl.

� Microsoft Cognitive Toolkit (CNTK, https://github.com/Microsoft/CNTK) ist das

Deep-Learning-Framework von Microsoft. Es kann mit den Programmiersprachen

Python, C#, Java oder BrainScript benutzt werden. CNTK kann auch als Keras-Back-

end betrieben werden.

� Caffe (http://caffe.berkeleyvision.org) ist ein in C++ geschriebenes Open-Source-

Deep-Learning-Framework, das sowohl mit CPUs als auch mit GPUs arbeitet. Es

wurde am Vision and Learning Center der University of California, Berkeley, entwi-

ckelt. Caffe wird eher in der Forschungswelt eingesetzt.

� Torch (http://torch.ch) ist eine in der Skriptsprache Lua geschriebene Open-Source-

Bibliothek, die unter anderem von Facebook und IBM eingesetzt wurde. Darauf

aufbauend wurde die Python-Library PyTorch (https://pytorch.org) von der Face-

book AI Research Group entwickelt. Beide Frameworks können mit GPU-Unter-

stützung arbeiten.

� Theano (http://www.deeplearning.net/software/theano) ist ein von der Universi-

tät Montreal entwickeltes Open-Source-Deep-Learning-Framework. Es wurde in

Python und CUDA entwickelt und hat eine GPU-Unterstützung.

Eine detaillierte Liste der zurzeit verfügbaren Deep-Learning-Frameworks finden Sie

unter anderem unter:

https://en.wikipedia.org/wiki/Comparison_of_deep_learning_software

2.4 Datenbeschaffung

Wir haben es schon erwähnt: Im Bereich Machine Learning und Deep Learning spie-

len Daten die zentrale Rolle.4 Ohne Daten können keine Modelle trainiert und eva-

luiert werden: Somit bilden die Datasets die Grundlage des gesamten Machine-

Learning-Ökosystems. Leider ist es aber oft so, dass wertvolle Daten nicht gern wei-

tergegeben oder dem breiten Publikum zur Verfügung gestellt werden, denn es

hängen sehr viele kommerzielle Interessen daran. Auf Programmierer/innen, Deep-

Learning-Experten und solche, die es werden wollen, wirkt das am Anfang sehr frus-

trierend. In den folgenden Abschnitten werden Sie erfahren, welche Möglichkeiten

Sie besitzen, um an interessante Daten für das Training Ihrer Modelle heranzu-

kommen.

4 Im Jahre 2016 bezeichnete Angela Merkel auf der IT-Messe CeBIT Daten als »die Rohstoffe des 21.

Jahrhunderts« und andere Journalisten bezeichnen Daten sogar als »neues Öl«.

6509.book Seite 40 Montag, 1. April 2019 5:40 17

2.4 Datenbeschaffung

41

2

2.4.1 Vorgefertigte Datasets

Vorgefertigte Datasets bzw. Daten (engl. datasets) werden frei verfügbar von Firmen,

Staaten, Kommunen, Institutionen oder Communitys im Internet zum Herunter-

laden bereitgestellt. Meistens wurden diese Daten schon strukturiert, auf fehlende

Einträge überprüft und bereinigt. Diese können dann 1:1 übernommen und für das

Training der neuronalen Netze eingesetzt werden.

Trotzdem müssen Sie jedoch beachten, welche Methodik bei diesem Datensammeln

benutzt wurde. Das heißt, Sie müssen die Gültigkeit der Daten, die Quelle und die

Werte überprüfen. Wenn Sie versuchen, Daten aus verschiedenen Quellen zu benut-

zen, beachten Sie, dass diese wohlmöglich auch andere Maßeinheiten (Fahrenheit

statt Celsius) und andere Zeitstempel (UTC statt GMT) besitzen können. Aus dem

Grund müssen Sie immer auf die Skala und die Normierung der Daten achten!

Überprüfen Sie ebenfalls, welche Formate zum Herunterladen angeboten werden.

Formate wie CSV, JSON oder XLS können problemlos von Python-Bibliotheken gela-

den bzw. geparst werden (siehe Kapitel 4, »Python und Machine-Learning-Biblio-

theken«).

Ein weiterer Punkt, der oft vergessen wird: Wenn Sie eine bestimmte Domäne, wie

z. B. Sport oder Wetterdaten, trainieren wollen, dürfen Sie nicht vergessen, Ihre

Daten zu aktualisieren! Genau wie die Außenwelt sich verändert, müssen auch die

Daten aktualisiert werden, ansonsten laufen Sie Gefahr, dass das trainierte Modell

nicht mehr korrekt funktioniert bzw. ungenaue Ergebnisse liefert!

2.4.2 Eigene Datasets

Wie der Name schon sagt, werden diese Datasets von Ihnen bzw. Ihren intelligenten

elektronischen Geräten produziert und gesammelt. Schauen Sie sich mal um, Sie

werden bestimmt auch Quellen finden, die für Sie interessante Daten generieren

können, z.B:

� Stromzähler (mit einem Smartmeter oder Raspberry Pi)

� Stromproduktion (z. B. von Ihrer Photovoltaikanlage)

� Wetterdaten (z. B. von einer heimischen Wetterstation)

� GPS-Daten (z. B. von Ihrem Handy)

� MP3-Bibliothek (von Ihrer iTunes-Bibliothek)

� annotiertes Fotoalbum (z. B. von Adobe Bridge oder iPhoto)

� Jogging- und Herzfrequenz-Daten (z. B. von Ihrer Smartwatch)

� Aktienkurse

6509.book Seite 41 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

42

Im Business-Bereich bzw. in Ihrem Unternehmen werden auch täglich Tausende von

Datasets generiert, z. B.:

� Kundendaten (z. B. Churn-Bewertung)

� Produktionsdaten

� Workflow- und Business-Process-Daten (z. B. aus einem SAP-System)

� OBD-2-Daten (z. B. aus einem Kfz-Flottenmanagementsystem)

� Daten aus Buchungssystemen

� Parkplatzdaten (z. B. um Parkplätze vorzureservieren)

� Finanzdaten

� Gesundheitsdaten

Diese kleine Auflistung zeigt, dass Daten in allen Anwendungsgebieten vorhanden

sind und in unterschiedlichster Form benutzt werden können. Doch ähnlich wie die

Daten, die von einer Community oder über Open Data zur Verfügung gestellt wer-

den, müssen diese im Vorfeld jeder Analyse auf Integrität, Korrektheit und Aktualität

überprüft werden. Unvollständige gesammelte Datasets können dazu führen, dass

die darauf trainierten Modelle fehlerhaft sind oder eine zu große Ungenauigkeit auf-

weisen. Zusätzlich muss die rechtliche Lage dieser Daten geklärt werden.

Hinweis: Frei verfügbare Datasets

Bevor Sie jedoch aufwendig Ihre eigenen Daten sammeln, mühsam annotieren und

ein eigenes Datenformat entwerfen, werfen Sie mal einen Blick auf Open Data oder

durch die Community erzeugte Daten. Im nächsten Abschnitt werden wir ein paar

Datenquellen genauer betrachten, die im Internet frei verfügbar und aufrufbar sind.

Viele Hersteller von IoT-Geräten (z. B. Netatmo mit seinen Wetterstationen) bieten

Möglichkeiten, die erzeugten Daten direkt in das korrekte Format herunterzuladen

und einer Community zur Verfügung zu stellen.

2.5 Datasets

2.5.1 Kaggle

Wenn es eine Website gibt, die man als Data Scientist auf keinen Fall verpassen sollte,

dann ist es Kaggle (www.kaggle.com). Das selbst ernannte Home Of Data Science and

Machine Learning bietet über 10.000 frei verfügbare Datasets (mit Creative-Com-

mons-Lizenz) in den Formaten (CSV oder JSON) an. Abbildung 2.5 zeigt einige von

ihnen. Teilweise werden zusätzlich Quellcode bzw. Modelle für Keras oder Tensor-

Flow angeboten.

6509.book Seite 42 Montag, 1. April 2019 5:40 17

2.5 Datasets

43

2

Abbildung 2.5 Liste von Datasets bei Kaggle

Kaggle als Inspirationsquelle für Machine Learning

Bei einem Blick auf Kaggle wird der Ausdruck »Daten sind das neue Öl« verständ-

licher. Die auf Kaggle angebotenen Datasets können für Sie auch als neue Inspi-

rationsquelle für zukünftige Apps oder Machine-Learning-Aufgaben fungieren. Als

Beispiel listen wir ein paar spannende Fragenstellungen auf, die sich mit Kaggle-

Datasets und Machine Learning bestimmt beantworten lassen:

� Welche Pilze kann ich essen?

� Wie hoch wird die Miete für ein 200 m2 großes Haus in einem bestimmten Stadt-

teil sein?

� Zur welcher botanischen Familie gehört eine bestimmte Blume?

� Welche Stethoskop-Audioaufnahmen zeigen Herzschlaganomalien an?

� Apfel oder Orange? Auch wenn diese Aufgabe für den Menschen ziemlich trivial

klingt, bietet Kaggle mit dem Dataset Fruits 360 (https://www.kaggle.com/mol-

tean/fruits/data) die Möglichkeit, aus einer Früchtebilderdatenbank seine eige-

nen Modelle zu trainieren und somit diese besonders komplexe Frage zu beant-

worten!

Viele Ergebnisse im Bereich Medizin, z. B. die Bewertung, ob eine Person auf HIV-

Behandlungen anspricht, wurden dank der frei verfügbaren Datasets von Kaggle

6509.book Seite 43 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

44

berechnet (Quelle: http://science.sciencemag.org/content/331/6018/698.full). Und

falls Sie nun Lust bekommen haben, diese Daten zu erforschen und daraus neue

Ergebnisse zu gewinnen, können Sie – nachdem Sie dieses Buch gelesen haben –

auch an den zahlreichen und spannenden Kaggle Challenges teilnehmen!

2.5.2 Chars74K

Die Aufgabe von OCR (Optical Character Recognition) besteht darin, eine Texterken-

nung von Zeichen in Dokumenten (z. B. in Bildern, Texten oder Formularen) zu er-

möglichen, die durch ein optisches Eingabegerät erzeugt worden sind, z. B. durch

einen Scanner oder eine Digitalkamera. Diese Aufgabe gelingt bei Textdokumenten,

deren Schriftarten und Hintergrund gut erkennbar sind, besonders gut. Doch nicht

jedes Bild stammt aus einem gut gescannten Formular, insbesondere wenn dieses

Bild mit einer Handykamera geschossen wurde.

Abbildung 2.6 Auszug aus dem »Chars47K dataset« (Bildquelle: http://www.ee.

surrey.ac.uk/CVSSP/demos/chars74k/)

Um trotz allem OCR auf solche Bilder durchführen zu können, hat Chars74K einzelne

Buchstaben aus unterschiedlichen Bildern (z. B. den Buchstaben C von einer Coca-

Cola-Dose oder ein X aus einer Twix-Verpackung) gesammelt und annotiert. Weitere

Quellen, wie die Kannada-Schrift5 oder Handschriften können Sie optional herunter-

laden und somit die Erkennung verbessern.

5 https://de.wikipedia.org/wiki/Kannada-Schrift

6509.book Seite 44 Montag, 1. April 2019 5:40 17

2.5 Datasets

45

2

2.5.3 ImageNET

Zu den wohl bekanntesten und von Forschern und Entwicklern meistbenutzten Da-

tasets gehört definitiv ImageNET6. Mit aktuell 14 Millionen annotierten Bildern dient

diese Bilddatenbank als Grundlage für zahlreiche Bilderkennungswettbewerbe. Das

bedeutet, wenn Sie Ihre generierten Modelle testen und evaluieren wollen, können

Sie diese Bilder als Evaluierungsbilder benutzen. Doch die Besonderheit von Image-

NET besteht nicht nur in der Anzahl der Bilder, sondern darin, dass jedes Bild zu einer

Kategorie bzw. Hierarchie des WordNet-Datasets gehört. Was bedeutet das? Word-

Net7 ist eine sogenannte lexikalische Datenbank; darin werden Verben, Namen und

sogar Adjektive in Gruppen bzw. Kategorien zusammengefasst. Diese Gruppen wer-

den nach dem Prinzip der Synonyme gebildet, was zum englischen Begriff Synset

führt.

Bei ImageNET werden dann diese vorgegebenen WordNet-Kategorien benutzt, um

den Inhalt eines Bildes zu beschreiben. Nehmen wir folgendes Beispiel aus Image-

NET: Wenn Sie nach »dog« suchen, werden Sie viele Bilder von unterschiedlichen

Hunden diverser Rassen finden (siehe Abbildung 2.7). Auf der linken Seite finden Sie

Kategorien. Wenn Sie auf die Begriffe klicken, klappen neue Kategorien auf (z. B. »spa-

niel«, »terrier«, »poodle«, siehe Abbildung 2.8). Diese Kategorien stammen vom

WordNet-Dataset.

Abbildung 2.7 Ergebnisse einer Suche bei ImageNET

6 http://www.image-net.org

7 https://wordnet.princeton.edu

6509.book Seite 45 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

46

Abbildung 2.8 Auf der linken Seite können Sie durch die Synonyme und Kategorien von

»dog« navigieren.

Gut zu wissen: VGG-Modelle

Bekannte Modelle, wie VGG-16 oder VGG-19 (siehe Kapitel 3, »Neuronale Netze«),

wurden auf ImageNet trainiert.

2.5.4 ImageClef

Eine weitere sehr beliebte Bilddatenbank zum Evaluieren und Trainieren von Bilder-

kennungsalgorithmen ist ImageClef. Hier werden mehrere Bild-Datasets ange-

boten.8 Die Bilder stammen meistens aus freien Quellen oder aus Wikipedia und

wurden in verschiedensten Granularitäten annotiert und beschrieben. Die Annota-

tionen reichen von einem globalen textuellen Inhalt des Bildes bis zu einer genauen

Segmentierung des Bildes. Das heißt, die einzelnen Teilelemente des Bildes (Baum,

8 http://www.imageclef.org/datasets

6509.book Seite 46 Montag, 1. April 2019 5:40 17

2.5 Datasets

47

2

Strand, Himmel) werden bei der Beschreibung ebenfalls berücksichtigt (siehe Abbil-

dung 2.9).

Wenn Sie Ihre Bilderkennung mithilfe des Datasets von ImageClef trainieren, kön-

nen Sie zum Beispiel herausfinden, ob im Bild eine Person am Strand liegt oder ein

Hund über die Straße läuft!

Abbildung 2.9 Beispiel einer Segmentierung mit dem Dataset von ImageClef (Bildquelle:

http://www.imageclef.org)

2.5.5 VGG

Die Universität Oxford bietet zahlreiche Datasets an, die Sie frei für das Trainieren

Ihrer Modelle benutzen können. Diese Datasets sind sehr unterschiedlich und um-

fassen annotierte Bildern von Hunden und Katzen (Oxford IIT Pet Dataset9, siehe Ab-

bildung 2.10) sowie botanische Eigenschaften von Blumen (Oxford Flowers Data-

set10) bis hin zu Skulpturen11 von Auguste Rodin und Henry Moore und einer

ausführlichen Auswahl von Gebäuden in Paris (siehe Abbildung 2.11).

9 http://www.robots.ox.ac.uk/~vgg/data/pets/

10 http://www.robots.ox.ac.uk/~vgg/data/flowers/

11 http://www.robots.ox.ac.uk/~vgg/data/sculptures6k/

6509.book Seite 47 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

48

Abbildung 2.10 Bildschirmauszug des »Oxford IIT Pet Dataset«

Abbildung 2.11 »The Paris Dataset« beinhaltet Bilder von Gebäuden in Paris, die über Flickr

gesammelt und annotiert wurden.

6509.book Seite 48 Montag, 1. April 2019 5:40 17

2.5 Datasets

49

2

Tipp: Brauchen Sie Inspiration?

Falls Sie neue Ideen für eine App oder Software im Bereich Bild- bzw. Videoerken-

nung suchen, sollten Sie sich die Demo-Webseite der Forscher der Oxford Visual Geo-

metry Group anschauen.12 Zahlreiche Onlinedemos zeigen auf Basis von frei verfüg-

baren Datasets, welche spannenden Szenarien im Multimediabereich mit Machine

Learning erzielt werden können!

2.5.6 YFCC100M

Über 100 Millionen Bilder und Videos, die von Yahoo! Flickr stammen und durch die

jeweiligen Autoren mit der Creative-Commons-Lizenz versehen wurden, bilden

diese sehr umfangreiche Bild- und Videodatenbank namens YFCC100M.13 Nachdem

Sie sich bei Yahoo! registriert und ein Onlineformular ausgefüllt haben, können Sie

sie herunterladen.

Abbildung 2.12 Auszug des Datasets »YFCC100M«

Falls Sie jedoch ohne Herunterladen einen Einblick in die gigantische Datenbank be-

kommen möchten, können Sie die Website der am Projekt YFCC100M beteiligten For-

12 http://www.robots.ox.ac.uk/~vgg/demo/

13 https://webscope.sandbox.yahoo.com/catalog.php?datatype=i&did=67

6509.book Seite 49 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

50

scher besuchen: http://search.mmcommons.org (siehe Abbildung 2.12). Über eine

Suche können Sie durch alle Medien (Bilder und Videos) stöbern und über entspre-

chende Tags die Suchergebnisse verfeinern.

2.5.7 YouTube-8M

Das YouTube-8M Dataset14 beruht, wie der Name schon verrät, nur auf YouTube-Vi-

deos. Das Dataset beinhaltet über 450.000 Stunden Videos, die anhand der Labels an-

notiert wurden, die von Benutzern angegeben worden sind. Diese Videos wurden

dann in 4.716 unterschiedliche Klassen sortiert und mit Knowledge-Graph15-Entitäten

semantisch verknüpft.

Abbildung 2.13 Auszug des »YouTube-8M Dataset«

2.5.8 MS-Celeb1M

Microsoft bietet mit seiner Bilddatenbank MS-Celeb1M16 eine Sammlung von einer

Million Promi-Bildern an (siehe Abbildung 2.14). Diese können benutzt werden, um

z. B. in Bildern Promis automatisch zu erkennen. Diese Bilddatenbank ist sehr groß

(über 100 GB), daher empfiehlt es sich, vorher Platz auf dem Rechner zu schaffen!

14 https://research.google.com/youtube8m/

15 https://developers.google.com/knowledge-graph/

16 https://www.researchgate.net/publication/295074418_MS-Celeb-1M_Challenge_of_

Recognizing_One_Million_Celebrities_in_the_Real_World

6509.book Seite 50 Montag, 1. April 2019 5:40 17

2.5 Datasets

51

2

Abbildung 2.14 Auszug des »MS-Celeb1M Datasets« für die Künstlerin »Lady Gaga«

Hinweis: Nutzungsbedingungen und Rechte für Datasets

Die Benutzung der Datasets ist nur für Forschungszwecke und nichtkommerzielle

Anwendungen erlaubt. Lesen Sie bitte die Nutzungsbedingungen ganz sorgfältig!

2.5.9 Microsoft COCO

Eine von Microsoft initiierte Datenbank für Objekterkennung ist die Microsoft-

COCO-Datenbank, die oft auch nur COCO17 genannt wird (nach dem englischen Akro-

nym für Common Objects in Context). Bei dieser Datenbank wurden 330.000 Bilder

samt Segmentierung und 1,5 Millionen Objektinstanzen annotiert und klassifiziert.

Zusätzlich wurden auch die Kontexte der Bilder erfasst, d. h., eine genaue textuelle

Beschreibung des Bildinhalts wird bei jedem Bild zurückgegeben. Über eine COCO-

17 http://cocodataset.org

6509.book Seite 51 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

52

API können Sie leichter auf die Annotationen und die Bilder zugreifen. In den letzten

Monaten wurden zahlreiche performante Modelle zur Erkennung von Personen und

Objekten auf Basis des COCO-Datasets trainiert.

Über die interaktive COCO Explorer-Suchseite18 können Sie erfahren, welche Datasets

innerhalb des COCO-Datasets vorhanden sind, und sich somit einen schnellen Über-

blick über die Segmentierung, Bilder und Annotationen verschaffen.

Abbildung 2.15 zeigt einen Auszug von einer Recherche mit dem Stichwort »car«.

Hier sehen Sie die Segmentierungen und die Objekte, die als Bereich gekennzeichnet

werden. Wenn Sie auf das Listen-Icon klicken, können Sie die textuelle Beschreibung

des Bildes einsehen.

Abbildung 2.15 Auszug der Suchseite des »COCO Explorer«

2.5.10 MNIST und Fashion-MNIST

Die Datenbank MNIST19 (Modified National Institute of Standards and Technology)

enthält über 70.000 handgeschriebene Schwarz-Weiß-Bilder von Zahlen (siehe Ab-

bildung 2.16) und gehört zu den wohl bekanntesten Datasets im Bereich Machine

Learning. In der Tat wird dieses Dataset sehr oft als Beispiel für Klassifizierungs-

modelle und Benchmarks benutzt.

18 http://cocodataset.org/#explore

19 http://yann.lecun.com/exdb/mnist/index.html

6509.book Seite 52 Montag, 1. April 2019 5:40 17

2.5 Datasets

53

2

Abbildung 2.16 Auszug aus dem MNIST-Dataset

Experten sind jedoch der Meinung, dass die Benutzung der MNIST-Datenbank als

Benchmark nicht mehr zeitgemäß sei: Die Klassifizierung der Bilder sei zu einfach

und die Modelle würden mit einer Präzision von 99,7 % den Inhalt der Bilder erken-

nen.20 Aus diesem Grund werden wir in diesem Buch oft die neuere Fashion-MNIST-

Datenbank21 benutzen. Diese wurde von dem Online-Versandhändler Zalando zur

Verfügung gestellt und beinhaltet statt handgeschriebener Schwarz-Weiß-Bilder von

Zahlen Bilder von T-Shirts, Schuhen, Taschen und Kleidern (siehe Abbildung 2.17).

Hätten Sie jemals gedacht, dass Ihre erste Begegnung mit Machine Learning etwas

mit Fashion und Mode zu tun haben würde?

Abbildung 2.17 Auszug des Zalando »Fashion-MNIST Datasets«: ganz viele Kleider, Taschen

und Schuhe!

20 http://fashion-mnist.s3-website.eu-central-1.amazonaws.com

21 https://github.com/zalandoresearch/fashion-mnist

6509.book Seite 53 Montag, 1. April 2019 5:40 17

2 Machine Learning und Deep Learning

54

2.5.11 Weitere Datasets

Die oben erwähnten Datasets bilden natürlich nur eine Auswahl von Daten, die für

das Training von neuronalen Netzen benutzt werden können. Es gibt weitere Data-

sets, die jedoch domänenspezifischer sind (z. B. für den Finanzsektor oder für den

medizinischen Bereich) und nur für bestimmte Aufgaben angewandt werden kön-

nen (Wetterprognose, Emotionserkennung in Texten, Früherkennung von Defekten

elektronischer Komponenten).

Aus dem Grund empfehlen wir Ihnen, noch einen Blick auf folgende Links zu Data-

sets zu werfen:

� https://archive.ics.uci.edu/ml/datasets.html

� http://scikit-learn.org/stable/datasets

� https://www.kairos.com/blog/60-facial-recognition-databases

� https://en.wikipedia.org/wiki/List_of_datasets_for_machine_learning_research

Wenn Sie nach bestimmten Daten im Netz suchen, können Sie auch die zahlreichen

Open-Data-Initiativen besuchen, z. B. die deutsche Website Govdata22, die Rohdaten

aus Bund, Ländern und Kommunen in verschiedenen Kategorien anbietet, oder die

Website Statista.de, die Statistiken und Fakten für mehrere Domänen bzw. Branchen

zum Herunterladen anbietet. Welche Daten von welchen Quellen Sie benutzen sol-

len, hängt ganz davon ab, welche Domäne Sie analysieren möchten!

Mehr über Open Data

Falls Sie mehr über die Potenziale, Prinzipien, Fakten und rechtliche Fragen rund um

Open Data erfahren möchten, bietet die Konrad-Adenauer-Stiftung Ihnen unter fol-

gender URL eine ausführliche Broschüre zum Herunterladen an:

http://www.kas.de/wf/de/33.44530

2.5.12 Checkliste Datasets

Sie haben eine interessante Datenquelle gefunden und möchten diese direkt in Ihr

Machine- bzw. Deep-Learning-Projekt einbeziehen? Nicht zu schnell! Zuerst müssen

Sie folgende wichtige Punkte überprüfen, bevor Sie diese Daten für einen kommer-

ziellen Gebrauch benutzen und ein Modell daraus extrahieren können.

22 https://www.govdata.de

6509.book Seite 54 Montag, 1. April 2019 5:40 17

2.6 Zusammenfassung

55

2

Die folgende kleine Checkliste sollten Sie durchgehen und die einzelnen Punkte über-

prüfen:

� Datum der Erfassung der Daten (Sind die Daten noch aktuell?)

� Herausgeber (Quelle, Internetadresse?)

� Verfügbarkeit (Online, Offline, auf Nachfrage?)

� Lizenzmodell (Creative Commons, Share-a-like, Freie Nutzung oder Public Do-

main?)

� Nutzungsbedingungen (In welchem Rahmen dürfen diese Daten benutzt werden?

Können diese auch kommerziell verwertet werden?)

� Ist ein Copyright oder Zitat notwendig? Oft ist es so, dass bei Datasets, die von Uni-

versitäten oder Forschergruppen zur Verfügung gestellt werden, verlangt wird,

dass ein Zitat erfolgt oder ein Verweis auf eine Publikation angegeben wird.

� Formate (CVS, JSON, XLS, MATLAB?)

� Medientypen (RGB-Bilder, Texte, Audio?)

� Volumen der Daten

� Granularität der Annotation der Daten

� Weitere Verwertung der Daten und des erlernten Modells

2.6 Zusammenfassung

In diesem Kapitel haben Sie erfahren, was Machine und Deep Learning sind, welche

Rolle Datasets spielen und wo Sie welche finden können. Bevor wir ausführlich auf

die Frameworks TensorFlow, Keras und TensorFlow.js eingehen, lernen Sie im

nächsten Kapitel die Grundlagen von Deep Learning kennen, nämlich die neurona-

len Netze.

6509.book Seite 55 Montag, 1. April 2019 5:40 17

6509.book Seite 186 Montag, 1. April 2019 5:40 17

187

6

Kapitel 6

Keras

»I get very excited when we discover a way of making neural networks

better – and when that’s closely related to how the brain works.«

– Geoffrey Hinton

Im letzten Kapitel haben Sie TensorFlow entdeckt und benutzt, um neuronale Netze

zu entwickeln. Sie haben bestimmt gemerkt, dass TensorFlow ein mächtiges Frame-

work ist, das jedoch wegen seiner Komplexität nicht immer sehr benutzerfreundlich

ist und für schnelles Prototyping teils ungeeignet ist. Hier kommt Keras ins Spiel: Es

wurde zunächst von seinem Gründer François Chollet im Rahmen des Projekts

ONEIROS (Open-ended Neuro-Electronic Intelligent Robot Operating System) ent-

wickelt – mit der Idee, ein generisches unabhängiges Framework für das Deep Lear-

ning zu implementieren. In der Tat unterstützt Keras verschiedene sogenannte Back-

ends bzw. Deep-Learning-Frameworks mit einer einheitlichen API, z. B. Microsoft

Cognitive Toolkit (CNTK), Theano und TensorFlow. Konkreter: Sie können ein neuron-

ales Netz in Keras definieren und dann entscheiden, ob Sie es eher mit dem CNTK-

oder dem TensorFlow-Framework trainieren lassen wollen.

6.1 Einführung

Keras bietet vorgefertigte Funktionen, z. B. um ein Modell zu trainieren, ein Dataset

zu laden und um natürlich mit wenig Aufwand Schichten und Aktivierungsfunktio-

nen zu definieren. Seit 2017 ist Keras in TensorFlow integriert und gehört offiziell zu

den TensorFlow-High-Level-APIs. Wenn Sie eine (oder mehrere) GPUs besitzen, wird

Keras den Code automatisch auf dieser ausführen. Die Steuerung wird im Hinter-

grund von TensorFlow verwaltet.

In diesem Kapitel werden Sie zunächst erfahren, wie Sie Keras installieren. An kleinen

Projekten lernen Sie, wie das Framework benutzt werden kann, um eine schnelle Zu-

sammensetzung neuronaler Netze zu erzielen.

6509.book Seite 187 Montag, 1. April 2019 5:40 17

6 Keras

188

6.2 Installation von Keras

In diesem Abschnitt werden Sie erfahren, wie Sie innerhalb von ein paar Minuten das

Keras-Framework installieren und benutzen können.

6.2.1 K wie Keras oder Konfusion

Bevor Sie mit Ihrer Suchmaschine nach Keras suchen und wahrscheinlich den ersten

Treffer anklicken, müssen wir Ihnen leider mitteilen, dass es nicht nur eine Keras-

Version gibt, sondern zwei! Bei der Auswahl müssen Sie vorsichtig sein. In der Tat

herrscht durch die Integration von Keras in TensorFlow zurzeit ein wenig Konfusion

beim Import der Python-Packages.

Abbildung 6.1 Die zwei Keras-Versionen: die »Keras API« integriert in TensorFlow (links)

und Keras als Frontend für Backends (rechts)

Die erste Version ist diejenige Keras-Version, die Framework-unabhängig installiert

werden kann (Sie sehen sie rechts in Abbildung 6.1). Das heißt, Sie können einfach be-

stimmen, mit welchem Framework im Hintergrund (TensorFlow, CNTK oder Theano)

Keras ausgeführt werden soll. Auf der offiziellen Keras-Website (https://keras.io,

siehe Abbildung 6.2) werden Sie zahlreiche Beispiele und eine sehr gute Dokumenta-

tion zu den Funktionen finden.

Die Installation erfolgt durch das Kommando:

pip install keras

Die zweite Version von Keras (links in Abbildung 6.1) wird von TensorFlow mitgelie-

fert und wird in Python durch folgende Zeile importiert:

import tensorflow as tffrom tensorflow.python import keras

Keras

tf.kerasfrom tensorflow.python import keras

TensorFlow

Kerasimport keras

Ke

ras

AP

I

TensorFlow theano CNTKMicrosoft

6509.book Seite 188 Montag, 1. April 2019 5:40 17

6.2 Installation von Keras

189

6

Abbildung 6.2 Die offizielle Website von Keras

Sie werden jedoch feststellen, dass sich die Versionsnummer der beiden (Keras.io

und tf.Keras) leicht unterscheiden. In der Tat hat die Keras-Version von Keras.io eine

höhere Versionsnummer als die von tf.Keras. Doch keine Sorge: Im Rahmen dieses

Buches und soweit nicht anders erwähnt, können Sie entweder die eine oder die

andere Version von Keras einsetzen.

Gut zu wissen

Natürlich können Sie beide Keras-Versionen auf Ihrem Rechner installieren. Solange

Sie nicht planen, Keras mit einem weiteren Backend wie Theano oder CNTK zu be-

nutzen, können Sie ruhig die in TensorFlow integrierte Version von Keras verwenden

(mit from tensorflow.python import keras).

Benutzen Sie Bibliotheken von Dritten, die auf Keras aufbauen, empfiehlt es sich,

sorgfältig die Abhängigkeiten und die benötigte Keras-Version zu überprüfen und

dementsprechend die Importe der Python-Packages anzupassen.

6509.book Seite 189 Montag, 1. April 2019 5:40 17

6 Keras

190

Abbildung 6.3 Keras auf der offiziellen TensorFlow-Website

Falls Sie schon Keras auf Ihrem Rechner haben und nicht mehr wissen, welche Im-

port-Befehle Sie angeben sollen, können Sie dies mit folgendem Code überprüfen:

# Benutzung von Keras (in TensorFlow)try:

import tensorflow as tffrom tensorflow.python import kerasprint("Keras TensorFlow version: {}".format(keras.__version__))

except:print("Keras TensorFlow Version nicht installiert")

# Wenn Sie zusätzlich Keras über keras.io installiert haben, werden Sie# folgende Zeilen ausführen können# Wenn es nicht der Fall sein sollte,# werden Sie folgende Fehlermeldung erhalten:# ModuleNotFoundError: No module named 'keras'try:

import keras

6509.book Seite 190 Montag, 1. April 2019 5:40 17

6.3 Modelle erstellen

191

6

print("Keras version: {}".format(keras.__version__))except:

print("Keras Version von keras.io nicht installiert")

Wichtig!

Alle Beispiele in diesem Buch, die die in TensorFlow integrierte Keras-Version ver-

wenden, wurden mit der Version 2.1.6 getestet. Auch mit der neuen TensorFlow 2.0-

Version können Sie diese Beispiele verwenden.

Alle anderen Keras-Beispiele setzen die Keras.io-Version 2.2.4 ein.

6.3 Modelle erstellen

Nachdem Sie Keras erfolgreich installiert haben, können wir uns der Erstellung der

Modelle widmen. Vergessen Sie nicht, dass Keras sich auf TensorFlow stützt, d. h.,

die Prinzipien der Schichten, der Tensoren und der Graphen werden nicht mehr im

Programmcode direkt vom Entwickler instanziiert, sondern werden im Hinter-

grund von Keras durchgeführt. Keras bietet zwei Möglichkeiten, ein Modell zur rea-

lisieren (Sequential und Functional), die wir in den nächsten Abschnitten präsentie-

ren werden.

6.3.1 Sequential Model

Wie der Name es schon verrät, werden bei diesem Verfahren die Schichten dem Mo-

dell sequenziell hinzugefügt. Bei der Erstellung der Modelle werden die Instanzen der

verschiedenen Schichten – diese werden als Layers bezeichnet – entweder mit der

Funktion model.add() (Variante 1) oder mithilfe eines Arrays (Variante 2) angelegt.

Folgendes Beispiel zeigt, wie ein sehr einfaches Netz eine XOR-Funktion (Exklusiv-

Oder-Gatter) lernen kann:

# 1. Variantexor_model = Sequential()xor_model.add(Dense(1024, input_dim=2))xor_model.add(Activation('relu'))xor_model.add(Dense(1))xor_model.add(Activation('sigmoid'))

# 2. Variantexor_model = Sequential([

Dense(1024, input_dim=2),Activation('relu'),

6509.book Seite 191 Montag, 1. April 2019 5:40 17

6 Keras

192

Dense(1),Activation('sigmoid')

])

Die Reihenfolge, in der die Schichten hinzugefügt werden, gibt die Struktur des Mo-

dells vor. In unserem Beispiel haben wir zwei Dense-Schichten hinzugefügt mit je-

weils 1024 Neuronen und 1 Neuron. Die Eingabe-Dimension muss nur bei der ersten

Schicht angegeben werden (hier mit dem Parameter input=2).

Tipp: Aktivierungsfunktionen

Sie können auch die Aktivierungsfunktion für jede Schicht mit dem Parameter acti-vation angeben. Dadurch wird der Quellcode kompakter, wie im folgenden Beispiel:

xor_model = Sequential()xor_model.add(Dense(1024, input_dim=2, activation="relu"))xor_model.add(Dense(1, activation="sigmoid"))

6.3.2 Functional API

Mit dieser Form der Modellerstellung können Modelle mit mehreren Eingängen und

mehreren Ausgängen, sogenannte azyklische Graphen, geschaffen werden, was beim

Sequential-Modell nicht möglich ist. Folgendes Beispiel zeigt, wie unser sehr einfa-

ches Modell mit der Functional API von Keras aufgebaut werden kann. Die Variable x

wird als Eingabe für die jeweilige nächste Schicht wiederverwendet:

inputs = Input(shape=(2,), dtype="float32")x = Dense(1024, name="First_Layer")(inputs)x = Activation('relu', name="ReLU ")(x)x = Dense(1, name="Dense_Layer")(x)predictions = Activation('sigmoid', name="Sigmoid ")(x)

Bei komplexeren Modellen wie im Projekt 2 von Kapitel 9, »Praxisbeispiele« (dort

geht es um intelligente Spurerkennung), wird die Functional API zur Modellinitia-

lisierung benutzt, um z. B. Abzweigungen (diese werden als Skip Connections bezeich-

net) im Graphen zu definieren, die dann parallele Operationen durchführen.

Tipp: Ausgabe der Modellstruktur

Mit der Keras-Funktion model.summary() können Sie jederzeit alle Schichten Ihres

Modells in Textform ausgeben lassen, wie z. B. hier mit unserem Modell xor_model:

_________________________________________________________________Layer (type) Output Shape Param #=================================================================First_Layer (Dense) (None, 1024) 3072_________________________________________________________________

6509.book Seite 192 Montag, 1. April 2019 5:40 17

6.4 Modelle trainieren

193

6

Relu_Activation (Activation) (None, 1024) 0_________________________________________________________________Dense_Layer (Dense) (None, 1) 1025_________________________________________________________________Sigmoid_Activation (Activati (None, 1) 0=================================================================Total params: 4,097Trainable params: 4,097Non-trainable params: 0_________________________________________________________________

6.3.3 Keras-Layers

Ähnlich wie TensorFlow bietet auch Keras eine Reihe von Schichten (keras.layers)

an, die miteinander kombiniert werden können, um ein Modell zu generieren. Dazu

zählen:

� Core Layers mit Dense (Fully Connected Layers)

� Convolutional und Pooling Layers für CNNs (Conv1D, Conv2D, MaxPooling)

� Recurrent Layers (für die Definition von RNN und LSTM)

� Activation Layers (für Aktivierungsfunktionen)

� Normalization Layers (z. B. Batch Normalization)

Sie werden diese einzelnen keras.layers Schritt für Schritt im Rahmen der Beispiele

entdecken und einsetzen.

6.4 Modelle trainieren

Der Aufbau und die Generierung von Modellen läuft bei Keras nach dem Prinzip aus

Abbildung 6.4 ab:

Abbildung 6.4 Typischer Prozess zur Generierung eines Modells mit Keras

Laden von Daten

Definition des Modellsmit keras.layers

model.compile()mit Optimizer

model.fit()

model.evaluate()

6509.book Seite 193 Montag, 1. April 2019 5:40 17

6 Keras

194

Ähnlich wie bei TensorFlow können verschiedene Optimizer für das Training des Mo-

dells eingesetzt werden. Der SGD-Optimizer (Stochastic Gradient Descent Optimizer)

wird wie folgt mit einer Lernrate (lr) von 0.01 instanziiert:

sgd = SGD(lr=0.01)

Keras bietet weitere Optimizer, z. B. Adadelta , Adagrad, Adamax oder den RMSprop an.

Nachdem die einzelnen Schichten des Modells angelegt und instanziiert wurden,

muss das Training noch mit einer Lernrate, einer Kostenfunktion und Metriken defi-

niert werden. Dies passiert vor dem Training mit der Funktion model.compile(), die

drei Eingabeparameter akzeptiert:

model.compile(loss="mean_squared_error", optimizer=sgd, metrics= ["mae", "acc"])

Eine Kosten- bzw. Loss-Funktion muss ebenfalls angegeben werden. Hier kann direkt

der Name der Loss-Funktion als String angegeben werden, z. B. categorical_crossen-

tropy. Metriken können ebenfalls definiert werden. Diese werden als Parameter met-

rics innerhalb der model.compile()-Funktion angegeben, entweder als String (mse,

mae, accuracy, mean_squared_error, mean_absolute_error) oder als Konstante (z. B. met-

rics.categorical_accuracy aus dem Package keras.metrics bzw. tensorflow.py-

thon.keras.metrics).

Gut zu wissen: Welche Kostenfunktion für welche Aufgabe?

Für Multiklassen-Klassifizierungsprobleme à la »Was ist auf dem Bild zu sehen?« wird

categorical_crossentropy benutzt:

model.compile(optimizer='rmsprop',loss='categorical_crossentropy',metrics=['accuracy'])

Für binäre Klassifizierungsprobleme à la »Hund oder Katze?« wird binary_cross-entropy benutzt:

model.compile(optimizer='rmsprop',loss='binary_crossentropy',metrics=['accuracy'])

Für ein Regressionsproblem kann z. B. mse benutzt werden:

model.compile(optimizer='rmsprop', loss='mse', metrics=['mse'])

Der erste Schritt unseres Modelltrainings ist bereits definiert. Nun kommen wir zur

Trainingsschleife. Erinnern Sie sich noch, dass Sie in TensorFlow Folgendes schreiben

mussten?

6509.book Seite 194 Montag, 1. April 2019 5:40 17

6.5 Modelle evaluieren

195

6

with tf.Session() as sess:sess.run(tf.global_variables_initializer())for i in epochs:

for b in batches:

# Batch für die Featuresimg_input = get_next_batch(train_data,b)

# Batch für die Labelslabels_output = get_next_batch(train_labels,b)

sess.run(train_op,feed_dict={images:img_input,labels:labels_output})

Mit Keras wird diese Trainingsschleife innerhalb der Funktion model.fit() implizit

aufgebaut. In der Tat können Sie hier durch die Eingabe der Parameter x, y, batch_size

und epochs jeweils die Eingabedaten, Ausgabedaten, die Anzahl der Batches und Epo-

chen bestimmen:

model.fit(x=input_data, y=output_data, batch_size=96, epochs=100)

Ziemlich einfach, oder? Des Weiteren können Sie mit dem Parameter verbose=1 den

Fortschritt des Trainings in der Konsole ausgeben lassen. Wie Sie sehen, ist die Defi-

nition der Trainingsschleife mit Keras ein Kinderspiel!

6.5 Modelle evaluieren

Die Evaluation eines Modells kann in drei Varianten durchgeführt werden. Bei der

ersten Variante geben Sie innerhalb von model.fit() einen sogenannten validation_

split an:

model.fit(x=input_data, y=output_data, batch_size=96, epochs=100, ¿validation_split=0.3)

Hierbei werden die Eingabedaten (hier x) in zwei Gruppen aufgeteilt: 70 % der Ein-

gabedaten dienen dem Training und 30 % der Validierung. Bei der Aufteilung dieser

Daten werden diese nicht durchmischt.

Die zweite Variante besteht darin, wiederum innerhalb von model.fit() den Parame-

ter validation_data mit den Validationsdaten-Tupeln (input_validation_data und

output_validation_data) anzugeben, die Sie vorher selbst angelegt haben:

model.fit(x=input_data, y=output_data, batch_size=96, epochs=100, ¿validation_data=(input_validation_data, output_validation_data))

6509.book Seite 195 Montag, 1. April 2019 5:40 17

6 Keras

196

Die dritte Variante besteht darin, die Funktion model.evaluate() aufzurufen:

evaluation_results = model.evaluate(input_test_data, input_test_data)print("Loss: {}".format(evaluation_results[0]))print("Accuracy: {}".format(evaluation_results[1]))

Die Evaluation wird erst nach dem Training durchgeführt und sollte immer mit

Daten durchgeführt werden, die das Modell noch nicht kennt. Denken Sie hier z. B. an

eine Bildklassifizierung, die man mit neuen Bildern testen muss, um zu sehen, ob das

Modell etwas Richtiges erkennen kann. Als Ergebnis von model.evaluate() werden

die Loss- und Accuracy-Metriken ausgegeben.

6.6 Modelle laden und exportieren

Genauso wie bei TensorFlow können bei Keras Modelle exportiert werden. Die Struk-

tur eines Modells kann entweder als JSON- oder als YAML-Datei exportiert werden.

Öffnen Sie dazu die Datei chap_6/keras_load_save.py.

6.6.1 Speichern des Modells

Um ein Keras-Modell zu speichern, wird die Funktion model.save() benutzt. Diese ex-

portiert die gesamte Struktur und die Parameter des neuronalen Netzes als *.h5-

Datei1. Unter chap_6/addition_model.h5 finden Sie das Modell aus einem sehr einfa-

chen Beispiel. Dieses wurde mit folgender Zeile gespeichert:

addition_model.save("addition_model.h5")

Um ein Modell wiederzuherstellen bzw. von einer *.h5-Datei zu laden, wird die mod-

el.load_model()-Funktion verwendet:

model = load_model('addition_model.h5')

Wenn das Modell geladen ist, können Sie weiter mit ihm arbeiten und z. B. die pre-

dict()-Funktion aufrufen.

# Modell wird neu geladen (von *.h5-Datei)model = load_model('addition_model.h5')result = model.predict([[[5, 5]]])# Das Ergebnis müsste ungefähr bei 10 liegen.print("Ergebnis: {}".format(result))

Listing 6.1 Laden eines Keras-Modells und Benutzung der »predict()«-Funktion

1 Hierarchical Data Format, siehe auch https://www.hdfgroup.org/solutions/hdf5/

6509.book Seite 196 Montag, 1. April 2019 5:40 17

6.6 Modelle laden und exportieren

197

6

6.6.2 Separates Speichern der Struktur und Parameter des Modells

Es gibt Fälle, in denen Sie die Struktur eines Modells separat von seinen Parametern

exportieren möchten. Ein Fall ist z. B. die Generierung einer Visualisierung der Mo-

dellstruktur: Da würden die Gewichtungen und die Bias wenig nützlich sein. Aus die-

sem Grund bietet Keras ein separates Speichern von Struktur und Parameter an.

Um die Struktur als JSON- oder YAML-Datei zu exportieren, können Sie die Funktio-

nen model.to_json() bzw. model.to_yaml() benutzen und die Struktur in die jeweilige

Datei speichern. Die Datei chap_6/keras_load_save.py gibt ein kompaktes Beispiel,

wie ein Modell gespeichert und geladen werden kann.

# Weights werden gespeichertaddition_model.save_weights("addition_weights.h5")

# Struktur des Modells wird als JSON gespeichertjson_str = addition_model.to_json()

with open("addition_model.json", "w") as json_file:json_file.write(json_str)

Listing 6.2 Die Parameter des Keras-Modells werden in »addition_weights.h5« und die

Struktur des Modells wird in »addition_model.json« gespeichert.

Die Gewichtungen des trainierten Netzes werden mit der Funktion model.save_

weights() als *.h5-Datei gespeichert.

Nach dem Speichern können Sie folgenden Quellcode-Abschnitt aufrufen, um die

Struktur und die Parameter des Modells zu laden:

# Modell wird mit der Kombination JSON und Weights geladen.with open('addition_model.json', "r") as f:

json_file_content = f.read()model = model_from_json(json_file_content)model.load_weights('addition_weights.h5')result = model.predict([[[1, 4]]]) # Das Ergebnis müsste ungefähr bei 5 liegen.print("Ergebnis: {}".format(result))

Listing 6.3 Laden eines Keras-Modells über die Dateien »addition_model.json« und

»addition_weights.h5«

Alternativ können Sie mit der Funktion model_from_yaml(json_file_content) das

Modell im YAML-Format speichern.

6509.book Seite 197 Montag, 1. April 2019 5:40 17

6 Keras

198

Gut zu wissen: *.h5-Datei

In Kapitel 9, »Praxisbeispiele«, werden Sie sehen, dass Sie Keras-Modelle im *.h5-For-

mat mit folgender Zeile für TensorFlow.js exportieren lassen können:

tfjs.converters.save_keras_model(addition_model, "./addition_model")

6.7 Keras Applications

Damit Sie nicht jedes Mal bekannte Netze neu anlegen und konfigurieren müssen,

bietet das Keras-Framework sogenannte Keras Applications. Das sind vorgefertigte

und konfigurierte Deep-Learning-Modelle, die eine Modellarchitektur und vortrai-

nierte Gewichtungen zur Verfügung stellen. Diese Modelle können direkt für die Vor-

hersage, Merkmalsextraktion und Feinabstimmung verwendet werden. Die einzel-

nen Gewichtungen und Parameter werden ebenfalls bei der Instanziierung des

Modells automatisch heruntergeladen.

In Tabelle 6.1 wurden diese direkt benutzbaren Modelle aufgelistet (samt Genauigkeit

und Gesamtanzahl der benutzten Layer). In der Datei chap_6/keras_applications_

list.py haben wir ein paar dieser Keras Applications instanziiert und deren Strukturen

mit model.summary() ausgeben lassen.

Model Size Top-1 Accuracy Top-5 Accuracy Parameters Depth

Xception 88 MB 0.790 0.945 22,910,480 126

VGG16 528 MB 0.715 0.901 138,357,544 23

VGG19 549 MB 0.727 0.910 143,667,240 26

ResNet50 99 MB 0.759 0.929 25,636,712 168

InceptionV3 92 MB 0.788 0.944 23,851,784 159

InceptionResNetV2 215 MB 0.804 0.953 55,873,736 572

MobileNet 17 MB 0.665 0.871 4,253,864 88

DenseNet121 33 MB 0.745 0.918 8,062,504 121

DenseNet169 57 MB 0.759 0.928 14,307,880 169

DenseNet201 80 MB 0.770 0.933 20,242,984 201

Tabelle 6.1 Auszug aus einer Liste der Modelle, die direkt mit Keras benutzt werden können

(Quelle: https://keras.io/applications)

6509.book Seite 198 Montag, 1. April 2019 5:40 17

6.8 Keras Callbacks

199

6

Hinweis: Vorgefertigte Modelle

Die vorgefertigten Modelle sind eigentlich keine Bestandteile von Keras, sondern

werden nachträglich als *.h5-Datei heruntergeladen. Das einmalige Herunterladen

wird während der Ausführung der Python-Datei angezeigt und kann je nach Modell-

größe und Geschwindigkeit Ihres Internetanschlusses etwas länger dauern.

6.8 Keras Callbacks

Es ist während eines Trainings immer wichtig, die Metriken im Auge zu behalten.

Hierfür werden Ihnen die Keras Callbacks behilflich sein, denn durch diese können

Funktionen während der Ausführung des Trainings getriggert werden und somit

wichtige Informationen z. B. am Anfang einer Epoche oder am Ende eines Batchs

sammeln und weitergeben. Keras enthält eine Reihe von Callbacks – unter anderem:

� ProgbarLogger – gibt die Metriken auf der Standardausgabe bzw. der Konsole aus.

� ModelCheckpoint – speichert das Modell nach jeder Epoche bzw. jedem Durchgang

und kann dazu benutzt werden, Zwischenversionen der Modelle zu speichern,

wenn komplexere Modelle inkrementell antrainiert werden sollen.

� TensorBoard – generiert eine Logdatei, die nachträglich über TensorBoard aufge-

rufen und visualisiert werden kann.

� CSVLogger – speichert bei jeder Epoche die Werte der Metriken in eine CSV-Datei.

� RemoteMonitor – überträgt am Ende einer Epoche mithilfe einer HTTP-POST-

Methode Werte an einen Server.

� LambdaCallback – ermöglicht die Erstellung eigener Callbacks.

Weitere Callbacks werden ausführlicher auf der offiziellen Keras-Website vorgestellt

(siehe https://keras.io/callbacks/#create-a-callback).

Callbacks werden innerhalb der Funktion model.fit() als Parameter (metrics, gefolgt

von einem Array von Callback-Instanzen) angegeben:

# CSVLogger-Callbackcsv_logger_cb = CSVLogger("xor_log.csv", separator=',', append=False)

# Eigenes Callbackmy_cb = MyCallback()

xor_model.fit(input_data, output_data, batch_size=1, epochs=6000, verbose=1, ¿callbacks=[csv_logger_cb, my_cb])

Listing 6.4 Beispiele einer Benutzung von Callbacks

6509.book Seite 199 Montag, 1. April 2019 5:40 17

6 Keras

200

Im ersten Fall wird das CSVLogger ()-Callback benutzt, das für jede Epoche die Metri-

ken in eine CSV-Datei speichert, sowie ein selbst definiertes Callback, MyCallback(),

das die Dauer eines Trainings misst.

Ein eigenes Callback, abgeleitet von der Klasse Callbacks (hier MyCallback), kann wie

folgt definiert werden, indem die Funktionen on_train_begin() und on_train_end()

angelegt werden:

class MyCallback(keras.callbacks.Callback):def on_train_begin(self, logs={}):

print("Anfang vom Begin")self.begin_time = time.time()

def on_train_end(self, logs={}):print("Ende vom Training")self.training_duration = time.time() - self.begin_timeprint("Dauer des Trainings: {} sec.".format(self.training_duration))

Listing 6.5 Definition eines eigenen Callbacks

Mit dem Callback EarlyStopping kann ein Abbruchkriterium des Trainings definiert

werden (und somit Rechenzeit gewonnen werden), z. B. wenn sich die Loss-Metriken

über die Epochen nur noch sehr minimal verändern. Im folgenden Beispiel wird wäh-

rend 20 Epochen (gesetzt durch den Parameter patience=20) überprüft, ob sich der

Wert von loss nur noch minimal um 0,0001 (Parameter min_delta) verändert hat:

early_stopping_cb = EarlyStopping(monitor="loss",min_delta=0.0001,patience=20)

Achtung: Abbruchkriterien gut auswählen

Seien Sie jedoch vorsichtig mit der Benutzung von EarlyStopping, und überprüfen

Sie sorgfältig immer die Abbruchkriterien. Ansonsten wird Ihr Modell unvollständig

trainiert sein.

Sie werden mehr über die Benutzung weiterer Callbacks (insbesondere LambdaCall-

back und RemoteMonitor) in Abschnitt 7.5 erfahren, in dem es um die Visualisierung

der Keras-Metriken geht.

6.9 Beispiel: Iris-Klassifikation mit Keras

In Kapitel 4, »Python und Machine-Learning-Bibliotheken«, haben wir gesehen, wie

man mit der Python-Bibliothek Scikit-learn anhand von vier botanischen Eigen-

schaften Iris-Blumen in drei Kategorien klassifizieren kann. In diesem Abschnitt wer-

den Sie lernen, wie Sie diese Aufgabe in ein paar Schritten mit Keras lösen können.

6509.book Seite 200 Montag, 1. April 2019 5:40 17

6.9 Beispiel: Iris-Klassifikation mit Keras

201

6

6.9.1 Dataset laden

Das Dataset der Irisblumen befindet sich in der Datei chap_6/iris.csv. Diese Daten

werden mit der np.loadtxt-Funktion von NumPy als Array geladen. Auch hier wer-

den die drei Kategorien Iris-setosa, Iris-versicolor und Iris-virginica auf die

Werte 0, 1 und 2 indiziert:

import numpy as npiris_data = np.loadtxt("iris.csv", delimiter=",", dtype="str", skiprows=1)# Wir erstellen die Kategorien:iris_label_array = ["Iris-setosa", "Iris-versicolor", "Iris-virginica"]label_index = 0for label in iris_label_array :

print(label)# Wenn eines der Label innerhalb von iris_data gefunden wird,# wird dieses durch den label_index ersetzt,# z. B. werden alle Einträge von Iris-versicolor durch den Wert 1 ersetzt.iris_data[np.where(iris_data[:,4]==label), 4] = label_indexlabel_index = label_index + 1

iris_data = iris_data.astype("float32")

Nun sind alle Daten im Array iris_data enthalten. Als Eingabe für unser Netz sind

nur die 4 ersten Spalten wichtig (d. h. nur die Spalten sepal-length, sepal-width, petal-

length und petal-width).

input_data = iris_data[:,0:4] # Spalten 0 bis 4 werden extrahiert

Dem gleichen Prinzip folgend, wird für die Ausgabe unseres Netzes die letzte Spalte

benutzt:

from tensorflow.python.keras.utils import to_categorical

output_data = iris_data[:,4] # Die 4. Spalte wird extrahiert.output_data = output_data.reshape(-1, 1) # Array von 1D-Arrayoutput_data = to_categorical(output_data, 3)

Da wir hier mit einer Klassifikationsaufgabe zu tun haben, werden wir die Keras-

Funktion to_categorical() benutzen, die die Zahlen 0,1 und 2 in den Arrays der Form

[1. 0. 0.], [0. 1. 0.] und [0. 0. 1.] umwandelt. Dies bezeichnet man im Machine Learning

auch als One Hot Encoding. Das ist sehr wichtig: Würde man willkürlich festlegen,

dass z. B. Iris-setosa = 1.0 und z. B. Iris-virginica = 2 ist, könnte unser Modell denken,

dass Iris-setosa < Iris-virginica, was eigentlich überhaupt keinen Sinn macht – und das

Training wäre somit komplett falsch! Mit dem One Hot Encoding wird dieses Pro-

blem gelöst.

6509.book Seite 201 Montag, 1. April 2019 5:40 17

6 Keras

202

6.9.2 Modell erstellen

Das Modell für die Klassifikation ist sehr schlicht und übersichtlich:

import tensorflow as tfimport numpy as npfrom tensorflow.python import kerasfrom tensorflow.python.keras import Sequentialfrom tensorflow.python.keras.layers import Dense, Activation, Inputfrom tensorflow.python.keras.models import Modelfrom tensorflow.python.keras.optimizers import SGDfrom tensorflow.python.keras import metricsfrom tensorflow.python.keras.utils import to_categoricalfrom sklearn.preprocessing import OneHotEncoder

# Aufbau des Modells mit Kerasiris_model = Sequential()iris_model.add(Dense(5, input_shape=(4,), activation="tanh"))iris_model.add(Dense(24, activation="relu"))iris_model.add(Dense(3, activation="softmax"))

Wir haben hier drei Dense-Schichten mit jeweils 5, 24 und 3 Neuronen definiert. Eine

Dense-Schicht ist als eine vollständig verbundene (fully connected) Schicht definiert.

Die Eingabeschicht erwartet eine Struktur mit 4 Elementen. Die benutzte Aktivie-

rungsfunktion ist ReLu. Die letzte Schicht wird uns 3 Werte zurückliefern bzw. Wahr-

scheinlichkeiten, dass eine bestimmte Klasse mit den Eingabewerten zugeordnet

wurde.

6.9.3 Modell trainieren

Das Training des Modells wird mit folgendem Code gestartet:

sgd = SGD(lr=0.001)iris_model.compile(loss="categorical_crossentropy", optimizer=sgd, ¿

metrics=["accuracy"])iris_model.fit(x=input_data, y=output_data, batch_size=10, ¿

epochs=500, verbose=1)

6.9.4 Modell evaluieren

Um unser Modell evaluieren zu können, müssen wir eine leichte Veränderung an

den Eingabedaten durchführen. Wir werden zuerst unsere Eingabedaten in zwei

»Gruppen« aufteilen: in eine für das Training und eine für das Testen bzw. Evaluie-

ren. Hierfür benutzen wir die Scikit-learn-Bibliothek mit der Funktion train_test_

split() mit dem Wert 0.20 für den Parameter test_size:

6509.book Seite 202 Montag, 1. April 2019 5:40 17

6.9 Beispiel: Iris-Klassifikation mit Keras

203

6

iris_train_input, iris_test_input, iris_train_output, iris_test_output = ¿train_test_split(input_data, output_data, test_size=0.20)

Das Training wird mit den Daten von iris_train_input und iris_train_output wie

folgt gestartet:

iris_model.compile(loss="categorical_crossentropy", ¿optimizer=sgd, metrics=["accuracy", metrics.mae])

iris_model.fit(x=iris_train_input, y=iris_train_output, batch_size=10, ¿epochs=500, verbose=1)

Nach dem Training kann die Funktion model.evaluate() diesmal mit den Testdaten

(iris_test_input und iris_test_output) benutzt werden:

# Evaluation auf Testdatenevaluation_results = iris_model.evaluate(iris_test_input, iris_test_output)

print("Loss: {}".format(evaluation_results[0]))print("Accuracy: {}".format(evaluation_results[1]))print("Mean Absolute Error: {}".format(evaluation_results[2]))

# Ausgabe# Loss: 0.12635588645935059# Accuracy: 0.9666666388511658# Mean Absolute Error: 0.07339978963136673

Die Variable evaluation_results beinhaltet die berechneten Metriken für den Loss,

die Accuracy und den Mean Absolute Error (diese Metrik wurde in model.compile()

angegeben). Das Ergebnis sieht sehr gut aus!

6.9.5 Modell benutzen

Nun ist die Zeit gekommen, um zu sehen, ob das Modell auch mit unbekannten Ein-

gabedaten die richtige Iris-Klasse bestimmen kann. Ähnlich wie in Kapitel 4, »Python

und Machine-Learning-Bibliotheken«, werden wir ein Testdataset auswählen, das in

test_data definiert ist:

# Testtest_data = np.array([[5.1,3.5,1.4,0.2], [5.9,3.,5.1,1.8], [4.9,3.,1.4,0.2], ¿

[5.8,2.7,4.1,1.]])predictions = iris_model.predict(test_data)index_max_predictions = np.argmax(predictions, axis=1)

for i in index_max_predictions:print("Iris mit den Eigenschaften {} gehört zur Klasse: {}".format(

test[i], iris_label_array[i]))

6509.book Seite 203 Montag, 1. April 2019 5:40 17

6 Keras

204

# AusgabeIris mit den Eigenschaften [5.1 3.5 1.4 0.2] gehört zur Klasse: Iris-setosaIris mit den Eigenschaften [4.9 3. 1.4 0.2] gehört zur Klasse: Iris-virginicaIris mit den Eigenschaften [5.1 3.5 1.4 0.2] gehört zur Klasse: Iris-setosaIris mit den Eigenschaften [5.9 3. 5.1 1.8] gehört zur Klasse: Iris-versicolor

Die Funktion iris_model.predict() liefert ein Array von Wahrscheinlichkeiten zu-

rück. Um zu wissen, zur welchen tatsächlichen Klassen die Eingabedaten gehören,

suchen wir mit np.argmax() den Index mit der größten Wahrscheinlichkeit. Dieser

Index wird dann die passende Klasse sein, die wir in einem letzten Schritt textuell

ausgeben. Den kompletten Quellcode für diese Aufgabe finden Sie in chap_6/keras_

iris_classification.py.

6.10 CNNs mit Keras

In Kapitel 5, »TensorFlow«, haben Sie gesehen, dass CNNs für die Klassifizierung von

Fashion-Bildern zum Einsatz gekommen sind. Auch bei Keras können diese CNN-

Schichten eingesetzt werden. Im folgenden kompakten Beispiel lernen Sie, wie Sie

auf Basis des Datasets CIFAR-102 (60.000 Bilder mit einer Größe von 32 × 32 Pixel) ein

beliebiges Bild zu einer der 10 CIFAR-Klassen zuordnen lassen (Flugzeug, Fahrzeug,

Vogel, Katze, Wild, Hund, Frosch, Pferd, Schiff und LKW, siehe Abbildung 6.5). Den

Quellcode zu diesem Projekt finden Sie in den Dateien chap_6/keras_cnn_cifar.py

und chap_6/keras_cnn_cifar_test.py.

6.10.1 CIFAR-10-Dataset laden

Das CIFAR-10-Dataset lässt sich über die Hilfsfunktion cifar10.load_data() von

Keras sehr einfach herunterladen. Die Einteilung der Bilder in Trainings- und Test-

daten wird ebenfalls von der Funktion cifar10.load_data() durchgeführt.

from tensorflow.python.keras.datasets import cifar10import matplotlib.pyplot as pltBATCH_SIZE = 32NUM_CLASSES = 10EPOCHS = 5

CIFAR_10_CLASSES = ["Flugzeug","Fahrzeug","Vogel","Katze","Wild","Hund", ¿"Frosch", "Pferd", "Schiff","LKW"]

2 https://www.cs.toronto.edu/~kriz/cifar.html

6509.book Seite 204 Montag, 1. April 2019 5:40 17

6.10 CNNs mit Keras

205

6

# Wir laden das CIFAR-10-Dataset über Keras(images_train, labels_train), (images_test, labels_test) = cifar10.load_data()

Listing 6.6 Vorbereitung des CIFAR-10-Datasets zur Benutzung mit Keras

Abbildung 6.5 Übersicht der CIFAR-10-Kategorien

(Bildquelle: https://www.cs.toronto.edu/~kriz/cifar.html)

Zum Testen können wir z. B. überprüfen, was das Bild mit dem Index 25 des Trai-

ningsdatasets darstellt: einen (stark verpixelten) Frosch!

plt.title(CIFAR_10_CLASSES[int(labels_train[25])])plt.imshow(images_train[25])plt.show()

Abbildung 6.6 Auszug aus der CIFAR-10-Bilddatenbank

6509.book Seite 205 Montag, 1. April 2019 5:40 17

6 Keras

206

Nun können wir das Dataset in ein NumPy-Array konvertieren und images_train und

images_test normalisieren. Das heißt, hier werden die Farben in Werte zwischen 0

und 1 konvertiert (statt in Werte von 0 bis 255).

images_train = np.array(images_train, dtype="float32")images_test = np.array(images_test, dtype="float32")

images_train /= 255images_test /=255

labels_train = to_categorical(labels_train, NUM_CLASSES)labels_test = to_categorical(labels_test, NUM_CLASSES)

6.10.2 Modell erstellen und trainieren

Für diese Aufgabe werden wir ein sehr einfaches Modell generieren, das das Prinzip

der Reihenfolge Conv2D und MaxPool2D verfolgt:

model = Sequential()model.add(InputLayer(input_shape=(32, 32, 3)))model.add(BatchNormalization())model.add(Conv2D(32, (3, 3), padding='same', ¿

input_shape=(32, 32, 3), activation="relu"))model.add(MaxPool2D(pool_size=(2,2)))model.add(Conv2D(64, (3, 3), padding='same'))model.add(MaxPool2D(pool_size=(2,2)))model.add(Conv2D(64, (3, 3), padding='same'))model.add(MaxPool2D(pool_size=(2,2)))model.add(Flatten())model.add(Dense(512, activation="relu"))model.add(Dense(NUM_CLASSES, activation='softmax'))

Listing 6.7 Definition des Modells

Da wir hier wiederum eine Klassifizierungsaufgabe durchführen, werden wir die

categorical_crossentropy als Loss-Funktion benutzen, und selbstverständlich soll-

te auch die accuracy des Modells während des Trainings gemessen werden. Mit

model.fit() wird das Training gestartet:

model.compile(loss=keras.losses.categorical_crossentropy, ¿optimizer=keras.optimizers.Adadelta(), metrics = ["accuracy"])

model.fit(images_train, labels_train, batch_size=BATCH_SIZE, epochs=EPOCHS)

6509.book Seite 206 Montag, 1. April 2019 5:40 17

6.10 CNNs mit Keras

207

6

6.10.3 Modell evaluieren und exportieren

Nach ein paar Minuten sollte Ihr Modell von den Trainingsdaten gelernt haben, zu

welcher der 10 CIFAR-Kategorien ein zufällig aus dem Testset ausgewähltes Bild ge-

hört. Das können wir mit model.evaluate() überprüfen. Als Metriken haben wir nun

die Werte von loss und die accuracy. Hier erreicht unser Modell eine Genauigkeit von

etwa 74,87 % nach 50 Epochen:

scores = model.evaluate(images_train, labels_train)print('Loss:', scores[0])print('Accuracy:', scores[1])

# Wir speichern das Modell. In keras_cnn_test_cifar.py wird dieses erneut# geladen.model.save("cifar_model.h5")

6.10.4 Modell exportieren und benutzen

Ab diesem Zeitpunkt können wir unser Modell mit model.predict() an einem Bild

testen, das dem Modell vollkommen unbekannt ist. Der Quellcode dazu befindet sich

in der Datei chap6/keras_cnn_cifar_test.py.

# Wir laden ein Bild von Wikimedia heruntertest_image_url = "https://upload.wikimedia.org/wikipedia/commons/thumb/9/92/¿VW_Polo_Genf_2018.jpg/1280px-VW_Polo_Genf_2018.jpg"

urllib.request.urlretrieve(test_image_url, "bild.jpg")

# Das Bild wird für das Modell auf 32x32 Pixel reduziert# und die Pixelwerte werden normalisiert.test_image = Image.open("bild.jpg")test_image = test_image.resize((32,32), Image.ANTIALIAS)test_image = np.array(test_image, dtype="float32")test_image /= 255test_image = test_image.reshape(-1, 32, 32, 3)

# Vorhersage des Modellsmodel = load_model('cifar_model.h5')predictions = model.predict(test_image)index_max_predictions = np.argmax(predictions)

# Darstellung des Ergebnissesplt.title("Ergebnis: {}".format(CIFAR_10_CLASSES[index_max_predictions]))

6509.book Seite 207 Montag, 1. April 2019 5:40 17

6 Keras

208

plt.imshow(test_image[0].reshape(32, 32, 3))plt.show()

Listing 6.8 Benutzung des trainierten Keras-Modells

Abbildung 6.7 Unser Modell hat das eingegebene Bild eines Autos richtig erkannt.

In diesem Beispiel haben wir ein Bild eines Autos aus der Wikipedia heruntergeladen,

auf die Dimensionen 32 × 32 Pixel verkleinert und als Eingabe für unser Modell be-

nutzt (siehe Abbildung 6.7). Das Ergebnis sieht gut aus: Der Inhalt des Bildes wurde

korrekt erkannt und der richtigen Klasse zugeordnet! Versuchen Sie es mal mit ande-

ren frei verfügbaren Bildern.

Gut zu wissen: Datenaugmentierung

Sie werden sich bestimmt wundern, dass die accuracy nur bei ca. 75 % liegt. Das

hängt sehr stark damit zusammen, dass die Auflösung und die Anzahl der Eingabe-

daten (Bilder) für diese Aufgabe schlicht zu niedrig sind und das Netz keine neuen

Merkmale lernen kann. Einen ganz interessanten Einblick über die erreichten ac-curacy-Werte von Modellen, die mit CIFAR-10 trainiert wurden, liefert folgende Web-

site:

http://rodrigob.github.io/are_we_there_yet/build/classification_datasets_

results.html#43494641522d313030

Dank der Datenaugmentierung z. B. mit einem ImageDataGenerator3 von Keras

kann eine accuracy bis zu 90 % bei CIFAR-10 erreicht werden, indem aus den Origi-

naldaten verschiedene Versionen des Bildes (z. B. um 10° gedreht oder gespiegelt) ge-

neriert werden. Weitere Informationen zur Implementierung dieses Ansatzes mit

Keras finden Sie auf folgendem Blogeintrag:

https://appliedmachinelearning.blog/2018/03/24/achieving-90-accuracy-in-object-

recognition-task-on-cifar-10-dataset-with-keras-convolutional-neural-networks/

3 https://keras.io/preprocessing/image/

6509.book Seite 208 Montag, 1. April 2019 5:40 17

6.11 RNNs und LSTMs in Keras

209

6

6.11 RNNs und LSTMs in Keras

In diesem Abschnitt erfahren Sie, wie Sie ein Modell für die Vorhersage eines Aktien-

kurses implementieren können. Hierbei werden wir eine LSTM-Schicht benutzen. Er-

innern Sie sich noch an die rückgekoppelten neuronalen Netze (RNN, recurrent neu-

ral networks), die wir kurz in Kapitel 3, »Neuronale Netze«, vorgestellt haben? Für

eine Vorhersage ist es wichtig, dass das Netz einen Kontext bzw. ein Gedächtnis über

die bisherige Kursentwicklung aufbaut und parat hält und somit lange temporale Ab-

hängigkeiten lernen kann.

Für unsere Aktienkursvorhersage wäre es ein bisschen zu restriktiv, nur den Vortag

(Tag –1) zu analysieren, um daraus eine Prognose für einen beliebigen Tag T zu ma-

chen. Hier fehlt komplett der sogenannte Kontext: Es gibt längere Zeitabschnitte in

der Vergangenheit, in denen die Aktienkurse gestiegen, aber auch gesunken sind. Ein

RNN wäre also hier nicht in der Lage, Aktienkurstendenzen der Vergangenheit zu

speichern. Das Intervall zwischen einem Tag der Vergangenheit und einem aktuellen

Tag wäre dabei auch zu groß: Das RNN bräuchte hier ein »Gedächtnis« mit dem ge-

samten Aktienkursablaufkontext aus der Vergangenheit, um ein sinnvolles Ergebnis

(für die Zukunft) liefern zu können.

Diese Funktionalität wird von LSTMs angeboten. Bei LSTMs wird die Information

über eine bestimmte kurze oder längere Sequenz oder Zeit (Long Short-Term) behal-

ten (Memory). Ein LSTM besitzt eigentlich drei Gates:

� das Input Gate (Eingabe),

� das Forget Gate (eine Sigmoid-Funktion wird benutzt, um zu entscheiden, welche

Information behalten oder vergessen bzw. verworfen wird) und

� das Output Gate, das das Ergebnis an die nächsten Neuronen weiterreicht.

Durch das Forget Gate wird bestimmt, wie lange eine Information innerhalb des

LSTMs (man spricht hier auch von einer Zelle) gespeichert werden soll bzw. ab wel-

chem Wert diese vergessen werden soll. Mit diesem Prinzip können längere Sequen-

zen gespeichert werden und als Kontext für die Vorhersage fungieren.

Unser Netz muss also von der Vergangenheit lernen, um erste Informationen über

eine Tendenz erkennen zu können und somit auch eine (in unserem Fall) virtuelle

Vorhersage durchzuführen.

6.11.1 Vorbereitung der Daten

Wir werden uns auf den Aktienkurs des Automobilherstellers Tesla fokussieren und

versuchen, daraus ein Modell zu entwickeln. Um diese Aufgabe zu lösen, brauchen

wir historische Daten des Aktienkurses. Wir haben diese von der URL https://

6509.book Seite 209 Montag, 1. April 2019 5:40 17

6 Keras

210

www.macrotrends.net/stocks/charts/TSLA/tesla/stock-price-history (siehe Abbildung

6.8) als CSV-Datei heruntergeladen und unter chap_6/data/tsla.csv gespeichert.

Beachten Sie, dass wir diese Datei leicht verändert haben: Die Kommentare lassen

wir mit dem Zeichen # beginnen, sonst wäre diese Datei nicht mit der Funktion

np.loadtxt() lesbar gewesen.

Abbildung 6.8 Der Aktienkurs von Tesla, visualisiert von der Website macrotrends.net

6509.book Seite 210 Montag, 1. April 2019 5:40 17

6.11 RNNs und LSTMs in Keras

211

6

Die Daten haben folgende Struktur:

date,open,high,low,close,volume2010-06-29,19.0000,25.0000,17.5400,23.8900,187663002010-06-30,25.7900,30.4192,23.3000,23.8300,171871002010-07-01,25.0000,25.9200,20.2700,21.9600,82188002010-07-02,23.0000,23.1000,18.7100,19.2000,51398002010-07-06,20.0000,20.0000,15.8300,16.1100,68669002010-07-07,16.4000,16.6300,14.9800,15.8000,69217002010-07-08,16.1400,17.5200,15.5700,17.4600,7711400[…]

Listing 6.9 Auszug der CSV-Aktienkursdatei »tsla.csv«

Wir laden nun die Datei tsla.csv mit der Funktion np.loadtxt() und von ihrem Inhalt

behalten wir erst mal nur die Spalte close (für den Schlusskurs).

initial_stock_data = np.loadtxt("tsla.csv", delimiter=",", skiprows=9, ¿comments="#", usecols=(4), dtype=None)

initial_stock_data = initial_stock_data.reshape(-1, 1)plt.plot(initial_stock_data)

Damit unser Modell von diesen Daten auch korrekt lernt, müssen die Preise norma-

lisiert werden:

# Normalisierung der Wertemin_max_scaler = MinMaxScaler(feature_range=(0, 1))stock_data = min_max_scaler.fit_transform(initial_stock_data)

In unserem Fall gehen wir davon aus, dass der Aktienwert an einem Tag T von den n

vorangegangenen Tagen abhängig ist. Hier müssen wir also ein neues Dataset gene-

rieren, das für jeden Eintrag die n vorangegangenen Tage und den Wert am Tag T

speichert. (Denken Sie hier einfach an ein Fenster von n Elementen , das blockweise

über die Tageswerte läuft). Dies erfolgt in der Funktion arrange_data():

# Speichert die historischen Datendays_before_values = []next_day_values = []

DAYS_BEFORE = 20# Reorganisiert die Datendef arrange_data(stock_data, days):

for i in range(len(stock_data) - days -1):days_before_values.append(stock_data[i:(i+days)])next_day_values.append(stock_data[i + days + 1]) # T

6509.book Seite 211 Montag, 1. April 2019 5:40 17

6 Keras

212

# Wir generieren die Arrays, und zwar mitarrange_data(stock_data, DAYS_BEFORE)

Die Variable DAYS_BEFORE gibt an, wie viele Tage in der Vergangenheit berücksichtig

werden sollen (hier 20 Tage).

Im nächsten Schritt wird das Dataset in zwei Sets geteilt: in 80 % der Daten für das

Training und 20 % für das Testen:

# Splitting für die Evaluation: 80% Training, 20% Test# Beachten Sie "shuffle=False", ansonsten ist die Zeitserie nicht mehr# korrekt.days_before_values_train, days_before_values_test, next_day_values_train, next_day_values_test = train_test_split(days_before_values,

day_values,test_size = 0.20,shuffle = False)

6.11.2 Modell erstellen und trainieren

Die Daten sind nun vorbereitet, wir können das Modell erstellen. Damit Sie das

Ganze schnell testen können, werden wir ein sehr einfaches Modell erstellen, das aus

nur einer LSTM-Schicht mit 10 Neuronen besteht. Die Ausgabe des Modells wird

dann den Wert an dem Tag T liefern.

stock_model = Sequential()stock_model.add(LSTM(10, input_shape=(DAYS_BEFORE, 1), return_sequences=False))stock_model.add(Dense(1))

Wir können nun das Modell mit den Werten der Arrays days_before_values_train

und next_day_values_train trainieren lassen:

stock_model.fit(x=[days_before_values_train], y=[next_day_values_train], ¿batch_size = 2, epochs = 10, verbose = 1)

6.11.3 Modell testen

Besonders interessant wird es sein, wie sich das Modell mit unbekannten Daten (in

diesem Fall days_before_values_test) verhält und ob das Modell überhaupt die Ten-

denzen der Vergangenheit gelernt hat:

# Vorhersage basiert auf dem Trainingsdatasettrain_redict = stock_model.predict([days_before_values_train])train_predict = min_max_scaler.inverse_transform(train_predict)test_predict = stock_model.predict([days_before_values_test])test_predict = min_max_scaler.inverse_transform(test_predict)

6509.book Seite 212 Montag, 1. April 2019 5:40 17

6.11 RNNs und LSTMs in Keras

213

6

In Abbildung 6.9 sehen Sie drei Kurven. Die hellgraue Kurve visualisiert die Original-

daten (stock_data). Die durchgezogene Kurve zeigt an, wie die Ausgabe des Modells

mit den Trainingswerten aussieht, und die gestrichelte Kurve zeigt, was auf Basis des

Modells die Testdaten ergeben haben.

Abbildung 6.9 Trainierter Aktienkurs, Test und tatsächlicher Aktienkurs

Wie Sie sehen, ist der prognostizierte Aktienkurs jedoch nicht so ganz perfekt. Woran

liegt das? Aktienkurse besitzen keine Regelmäßigkeiten (im Gegensatz z. B. zum

Stromverbrauch eines Haushalts) und keine Periodizität (z. B. korrelieren Verkaufs-

zahlen von Eis mit der Jahreszeit). In unserem Beispiel kann man einen Gesamttrend

erkennen, aber keine feingranularen Marktschwankungen. Leider müssen wir Sie an

dieser Stelle auch ein bisschen enttäuschen: Sie können mit diesem Modell nicht

reich werden! Das Modell wird lediglich eine Tendenz für die Zukunft angeben kön-

nen (der Kurs wird steigen oder sinken), aber dafür fehlen uns noch zahlreiche Infor-

mationen vom Markt.

Versuchen Sie es mal mit anderen Aktienkursen. Wenn das Modell präzise genug de-

finiert wurde, sollte die grüne Testkurve sehr nahe an der tatsächlichen Wertkurve

liegen. Überprüfen Sie auch den Wert des Mean Squared Error (MSE): Je niedriger er

ist, desto präziser ist das Modell. Wenn dies nicht der Fall sein sollte, versuchen Sie,

z. B. die Anzahl der units innerhalb des LSTMs zu vergrößern und die Datasets mithil-

fe der Variablen DAYS_BEFORE leicht variieren zu lassen.

6509.book Seite 213 Montag, 1. April 2019 5:40 17

6 Keras

214

Gut zu wissen: Anwendungen von LSTM

LSTM kann nicht nur für Vorhersagen benutzt werden, sondern findet auch zahlrei-

che Anwendungsfälle im Bereich NLP (Natural Language Processing) und Textana-

lyse. In Kapitel 9, »Praxisbeispiele«, werden Sie LSTM mit Keras für den Bereich der

Sentiment-Analyse einsetzen.

6.12 Zusammenfassung

In diesem Kapitel konnten Sie das Deep-Learning-Framework Keras entdecken und

feststellen, dass sich damit dank einer vereinfachten Syntax und API neuronale

Netze übersichtlicher strukturieren und trainieren lassen als in TensorFlow. Sie

haben auch gesehen, wie man Modelle mit der Funktion model.evaluate() evaluieren

kann und wie man sehr schnell ein Klassifikationsproblem mit CNNs oder eine Vor-

hersage mit LSTMs lösen kann.

Keras besitzt eine sehr starke Anwender-Community, und aufgrund der verstärkten

Integration (in TensorFlow 2 werden die Tutorials direkt mit Keras vorgestellt) von

Keras in TensorFlow gehen wir davon aus, dass Keras in den nächsten Jahren weiter-

hin zu den beliebtesten Frameworks für effizientes und schnelles Prototyping von

Deep-Learning-Modellen zählen wird.

Bevor wir dieses Kapitel abschließen, möchten wir Ihnen zwei Vorschläge machen:

Wenn Sie neugierig geworden sind und mehr über den Einsatz von Keras für praxis-

nahe Aufgaben erfahren wollen, empfehlen wir Ihnen Kapitel 9, »Praxisbeispiele«,

mit den Anwendungsbeispielen Verkehrszeichenerkennung (Projekt 1) und Senti-

ment-Analyse (Projekt 6). Wenn Sie sich mehr für die Aspekte Callbacks und Visua-

lisierungen von Keras-Metriken interessieren, schlagen wir Ihnen vor, Ihre Lektüre

mit dem nächsten Kapitel fortzusetzen.

6509.book Seite 214 Montag, 1. April 2019 5:40 17

Auf einen Blick

Auf einen Blick

1 Einführung ............................................................................................................... 15

2 Machine Learning und Deep Learning ............................................................ 29

3 Neuronale Netze .................................................................................................... 57

4 Python und Machine-Learning-Bibliotheken .............................................. 95

5 TensorFlow ............................................................................................................... 125

6 Keras ........................................................................................................................... 187

7 Netze und Metriken visualisieren .................................................................... 215

8 TensorFlow.js .......................................................................................................... 261

9 Praxisbeispiele ........................................................................................................ 317

10 Ausblick ..................................................................................................................... 397

11 Fazit ............................................................................................................................ 415

6509.book Seite 3 Montag, 1. April 2019 5:40 17

Inhalt

5

Inhalt

1 Einführung 15

1.1 Über dieses Buch ................................................................................................................. 15

1.1.1 Voraussetzungen ................................................................................................. 16

1.1.2 Aufbau des Buches .............................................................................................. 16

1.2 Ein Einblick in Deep Learning ......................................................................................... 17

1.3 Deep Learning im Alltag und in der Zukunft .......................................................... 19

1.3.1 Sprachverarbeitung ............................................................................................. 19

1.3.2 Automatische Sprachübersetzungen ............................................................ 20

1.3.3 Visual Computing ................................................................................................ 21

1.3.4 Autonomes Fahren .............................................................................................. 23

1.3.5 Deep Learning in der Medizin .......................................................................... 24

1.3.6 Deep Learning in der Finanzwelt .................................................................... 25

1.3.7 Deep Learning in der Energiewirtschaft ....................................................... 27

2 Machine Learning und Deep Learning 29

2.1 Einführung .............................................................................................................................. 29

2.2 Lernansätze bei Machine Learning .............................................................................. 34

2.2.1 Supervised Learning ............................................................................................ 34

2.2.2 Unsupervised Learning ...................................................................................... 36

2.2.3 Semi-supervised Learning ................................................................................. 36

2.2.4 Reinforcement Learning .................................................................................... 37

2.2.5 Aktives Lernen ....................................................................................................... 38

2.3 Deep-Learning-Frameworks ........................................................................................... 39

2.4 Datenbeschaffung .............................................................................................................. 40

2.4.1 Vorgefertigte Datasets ....................................................................................... 41

2.4.2 Eigene Datasets .................................................................................................... 41

2.5 Datasets ................................................................................................................................... 42

2.5.1 Kaggle ...................................................................................................................... 42

2.5.2 Chars74K ................................................................................................................. 44

2.5.3 ImageNET ............................................................................................................... 45

2.5.4 ImageClef ................................................................................................................ 46

6509.book Seite 5 Montag, 1. April 2019 5:40 17

Inhalt

6

2.5.5 VGG ........................................................................................................................... 47

2.5.6 YFCC100M .............................................................................................................. 49

2.5.7 YouTube-8M .......................................................................................................... 50

2.5.8 MS-Celeb1M .......................................................................................................... 50

2.5.9 Microsoft COCO ................................................................................................... 51

2.5.10 MNIST und Fashion-MNIST ............................................................................... 52

2.5.11 Weitere Datasets ................................................................................................. 54

2.5.12 Checkliste Datasets ............................................................................................ 54

2.6 Zusammenfassung ............................................................................................................. 55

3 Neuronale Netze 57

3.1 Aufbau und Prinzip ............................................................................................................. 57

3.1.1 Das künstliche Neuron ....................................................................................... 59

3.1.2 Wie funktioniert ein künstliches Neuron? .................................................. 59

3.1.3 Mehrschichtige neuronale Netze ................................................................... 61

3.2 Wie lernt ein neuronales Netz? .................................................................................... 63

3.2.1 Lernvorgang ........................................................................................................... 63

3.2.2 Backpropagation und Fehlerfunktionen ...................................................... 66

3.2.3 Gewichtsanpassung und Training ................................................................. 67

3.2.4 Gradientenverfahren .......................................................................................... 68

3.3 Datenaufbereitung ............................................................................................................. 70

3.4 Ein einfaches neuronales Netz ..................................................................................... 71

3.4.1 Variante 1 ............................................................................................................... 73

3.4.2 Variante 2 ............................................................................................................... 76

3.5 Netzarchitektur .................................................................................................................... 80

3.5.1 Convolutional Neural Networks ..................................................................... 80

3.5.2 Rekurrente neuronale Netze ............................................................................ 84

3.6 Bekannte Netze .................................................................................................................. 86

3.6.1 LeNet ........................................................................................................................ 87

3.6.2 AlexNet .................................................................................................................... 87

3.6.3 VGGNet ................................................................................................................... 87

3.6.4 YOLO ......................................................................................................................... 88

3.6.5 PoseNet ................................................................................................................... 89

3.7 Die Fallstricke des Deep Learnings ............................................................................. 89

3.8 Zusammenfassung ............................................................................................................. 94

6509.book Seite 6 Montag, 1. April 2019 5:40 17

Inhalt

7

4 Python und Machine-Learning-Bibliotheken 95

4.1 Installation von Python 3.6 ............................................................................................ 95

4.1.1 Unter Microsoft Windows ................................................................................ 96

4.1.2 Unter macOS ......................................................................................................... 97

4.1.3 Alternative: Python 3.6-Installation mit Anaconda ................................ 98

4.2 Programmierumgebungen ............................................................................................. 101

4.2.1 Microsoft Visual Code ........................................................................................ 101

4.2.2 PyCharm CE ............................................................................................................ 103

4.2.3 Rodeo ...................................................................................................................... 106

4.2.4 Spyder ...................................................................................................................... 107

4.3 Jupyter Notebook ................................................................................................................ 108

4.4 Python-Bibliotheken für das Machine Learning ................................................... 113

4.4.1 NumPy ..................................................................................................................... 113

4.4.2 SciPy ......................................................................................................................... 114

4.4.3 Scikit-learn ............................................................................................................. 114

4.5 Nützliche Routinen mit NumPy und Scikit-learn für ML .................................. 115

4.5.1 Laden eines Datasets aus einer CSV- oder JSON-Datei .......................... 115

4.5.2 Laden eines Datasets aus dem Web .............................................................. 116

4.5.3 Laden eines in Scikit-learn inkludierten Datasets ..................................... 117

4.5.4 Daten explorieren und visualisieren ............................................................. 117

4.5.5 Normalisierung von Daten ............................................................................... 118

4.6 Ein erstes Machine-Learning-Beispiel ........................................................................ 119

4.7 Zusammenfassung ............................................................................................................. 123

5 TensorFlow 125

5.1 Einführung ............................................................................................................................ 125

5.2 Installation ............................................................................................................................ 128

5.2.1 Installation von TensorFlow unter Windows ............................................. 129

5.2.2 TensorFlow mit alleiniger CPU-Unterstützung ........................................ 129

5.2.3 TensorFlow mit GPU-Unterstützung ............................................................. 129

5.2.4 Installation von TensorFlow unter macOS ................................................. 135

5.2.5 Überprüfung der TensorFlow-Installation .................................................. 135

6509.book Seite 7 Montag, 1. April 2019 5:40 17

Inhalt

8

5.3 Grundkonzepte .................................................................................................................... 136

5.3.1 Tensoren ................................................................................................................. 136

5.3.2 Konstanten ............................................................................................................. 137

5.3.3 Variablen ................................................................................................................. 140

5.3.4 Graphen ................................................................................................................... 142

5.3.5 Platzhalter und Feed Dictionary ...................................................................... 147

5.3.6 Operationen .......................................................................................................... 148

5.4 Erster Kontakt mit TensorBoard: Einen Graphen visualisieren ...................... 149

5.5 Einen Graphen in TensorBoard debuggen .............................................................. 152

5.6 Projekt 1: Eine lineare Regression ............................................................................... 156

5.6.1 Schritt 1: Datengenerierung und Visualisierung ...................................... 157

5.6.2 Schritt 2: Modell erstellen ................................................................................. 158

5.6.3 Schritt 3: Modell trainieren .............................................................................. 159

5.6.4 Schritt 4: Modell benutzen und Ergebnisse visualisieren ..................... 160

5.7 Projekt 2: Fashion MNIST ................................................................................................ 161

5.7.1 Schritt 1: Vorbereitung der Daten .................................................................. 162

5.7.2 Schritt 2: Laden der Daten ................................................................................ 164

5.7.3 Schritt 3: Modell erstellen ................................................................................ 166

5.7.4 Schritt 4: Modell trainieren .............................................................................. 168

5.7.5 Schritt 5: Modell benutzen .............................................................................. 169

5.7.6 Schritt 6: Modell erweitern .............................................................................. 169

5.8 TensorFlow-Modelle speichern und laden ............................................................... 171

5.8.1 tf.train.Saver() ....................................................................................................... 171

5.8.2 Modell speichern .................................................................................................. 172

5.8.3 Modell wiederherstellen .................................................................................... 173

5.8.4 tf.saved_model.builder.SavedModelBuilder() ............................................ 174

5.8.5 Modell speichern .................................................................................................. 174

5.8.6 Modell wiederherstellen .................................................................................... 176

5.9 Projekt 3: Konvolutionales neuronales Netz mit TensorFlow ........................ 176

5.9.1 Schritt 1: Modell generieren ............................................................................. 176

5.9.2 Schritt 2: Festlegung der Metriken ............................................................... 180

5.9.3 Schritt 3: Modell trainieren .............................................................................. 181

5.10 High-Level APIs .................................................................................................................... 183

5.11 Prozess ..................................................................................................................................... 184

5.12 Zusammenfassung ............................................................................................................. 185

6509.book Seite 8 Montag, 1. April 2019 5:40 17

Inhalt

9

6 Keras 187

6.1 Einführung .............................................................................................................................. 187

6.2 Installation von Keras ...................................................................................................... 188

6.2.1 K wie Keras oder Konfusion .............................................................................. 188

6.3 Modelle erstellen ............................................................................................................... 191

6.3.1 Sequential Model ................................................................................................ 191

6.3.2 Functional API ...................................................................................................... 192

6.3.3 Keras-Layers .......................................................................................................... 193

6.4 Modelle trainieren .............................................................................................................. 193

6.5 Modelle evaluieren ............................................................................................................. 195

6.6 Modelle laden und exportieren .................................................................................... 196

6.6.1 Speichern des Modells ........................................................................................ 196

6.6.2 Separates Speichern der Struktur und Parameter des Modells ........... 197

6.7 Keras Applications .............................................................................................................. 198

6.8 Keras Callbacks .................................................................................................................... 199

6.9 Beispiel: Iris-Klassifikation mit Keras ....................................................................... 200

6.9.1 Dataset laden ........................................................................................................ 201

6.9.2 Modell erstellen .................................................................................................... 202

6.9.3 Modell trainieren ................................................................................................. 202

6.9.4 Modell evaluieren ................................................................................................ 202

6.9.5 Modell benutzen .................................................................................................. 203

6.10 CNNs mit Keras .................................................................................................................... 204

6.10.1 CIFAR-10-Dataset laden ..................................................................................... 204

6.10.2 Modell erstellen und trainieren ...................................................................... 206

6.10.3 Modell evaluieren und exportieren ............................................................... 207

6.10.4 Modell exportieren und benutzen ................................................................. 207

6.11 RNNs und LSTMs in Keras ................................................................................................ 209

6.11.1 Vorbereitung der Daten ..................................................................................... 209

6.11.2 Modell erstellen und trainieren ...................................................................... 212

6.11.3 Modell testen ....................................................................................................... 212

6.12 Zusammenfassung ............................................................................................................. 214

6509.book Seite 9 Montag, 1. April 2019 5:40 17

Inhalt

10

7 Netze und Metriken visualisieren 215

7.1 TensorBoard ......................................................................................................................... 215

7.1.1 Einen Graphen visualisieren ............................................................................ 216

7.1.2 Metriken visualisieren ....................................................................................... 220

7.1.3 Histogramme ....................................................................................................... 222

7.1.4 Text-Dashboard ................................................................................................... 223

7.1.5 Bilderdatensätze mit dem Images-Dashboard visualisieren ............... 226

7.1.6 TensorBoard Debugger ..................................................................................... 228

7.2 tf_cnnvis ................................................................................................................................ 232

7.3 Visualisierung mit Keras ................................................................................................. 234

7.3.1 plot_model() ......................................................................................................... 234

7.3.2 TensorBoard-Callbacks ...................................................................................... 236

7.3.3 TensorBoard Debugger mit Keras ................................................................. 237

7.3.4 Aktivierungen visualisieren .............................................................................. 238

7.3.5 Keras-Metriken mit Bokeh darstellen .......................................................... 242

7.4 Visualisierung von CNNs mit Quiver ......................................................................... 244

7.4.1 Installation ............................................................................................................. 245

7.4.2 Start .......................................................................................................................... 245

7.5 Bonus: Interaktive Visualisierung mit Keras-Callbacks, Node.js und

HTML5 selbst implementieren ...................................................................................... 247

7.5.1 Projektarchitektur ................................................................................................ 248

7.5.2 Benutzung von Keras-Callbacks ...................................................................... 249

7.5.3 Server ....................................................................................................................... 251

7.5.4 Aufbau der Visualisierung ................................................................................. 254

7.5.5 Start der Visualisierung ..................................................................................... 256

7.6 Weitere Visualisierungsmöglichkeiten .................................................................... 258

7.6.1 Netron ...................................................................................................................... 258

7.6.2 ConX ......................................................................................................................... 259

8 TensorFlow.js 261

8.1 Anwendungsfälle ................................................................................................................ 261

8.2 Installation von BrowserSync ........................................................................................ 265

8.3 Installation von TensorFlow.js ...................................................................................... 266

6509.book Seite 10 Montag, 1. April 2019 5:40 17

Inhalt

11

8.4 Konzepte ................................................................................................................................. 269

8.4.1 Keras vs. TensorFlow.js ....................................................................................... 270

8.4.2 Variablen ................................................................................................................. 273

8.4.3 Tensoren ................................................................................................................ 274

8.4.4 Operationen ........................................................................................................... 278

8.4.5 Modelle und Schichten ..................................................................................... 279

8.4.6 Bilddaten mit tf.fromPixels() einlesen ......................................................... 280

8.5 Ihr erstes Modell mit TensorFlow.js: Eine quadratische Regression ........... 281

8.5.1 Schritt 1: index.html-Datei anlegen .............................................................. 282

8.5.2 Schritt 2: Daten anlegen .................................................................................... 286

8.5.3 Schritt 3: Modell erstellen ................................................................................. 286

8.5.4 Schritt 4: Modell trainieren .............................................................................. 287

8.6 Laden und Speichern von Modellen ........................................................................... 289

8.6.1 Modelle mit model.save() speichern ............................................................ 290

8.6.2 Modell laden .......................................................................................................... 295

8.6.3 Keras-Modelle exportieren und in TensorFlow.js importieren ............ 297

8.7 PoseNet-Modell mit TensorFlow.js ............................................................................ 298

8.7.1 Schritt 1: Implementierung der Benutzerschnittstelle .......................... 300

8.7.2 Schritt 2: Laden des PoseNet-Modells ......................................................... 304

8.7.3 Schritt 3: Single- und Multi-Pose-Erkennung ............................................. 305

8.7.4 Schritt 4: Ergebnisse von PoseNet visualisieren ....................................... 307

8.8 TensorFlow.js noch einfacher: ml5.js ......................................................................... 314

9 Praxisbeispiele 317

9.1 Projekt 1: Verkehrszeichenerkennung mit Keras ................................................ 318

9.1.1 Schritt 1: Datasets ............................................................................................... 319

9.1.2 Schritt 2: Datenanalyse und Vorbereitung der Klassifikation .............. 322

9.1.3 Schritt 3: Modell trainieren .............................................................................. 324

9.1.4 Schritt 4: Modell testen ..................................................................................... 329

9.1.5 Erweiterungsmöglichkeiten ............................................................................. 332

9.2 Projekt 2: Intelligente Spurerkennung mit Keras und OpenCV ..................... 333

9.2.1 Schritt 1: Methodik zur Datenerstellung ..................................................... 334

9.2.2 Schritt 2: Benutzung der Modelle .................................................................. 339

9.3 Projekt 3: Erkennung der Umgebung mit YOLO und

TensorFlow.js bzw. ml5.js ............................................................................................. 346

9.3.1 Das YOLO-Modell ................................................................................................ 346

6509.book Seite 11 Montag, 1. April 2019 5:40 17

Inhalt

12

9.3.2 Schritt 1: Vorbereitung des Projekts .............................................................. 349

9.3.3 Schritt 2: Aufbereitung der Objekterkennung ........................................... 350

9.3.4 Schritt 3: Benutzung des YOLO-Modells ..................................................... 355

9.3.5 Schritt 4: Erweiterungsmöglichkeiten .......................................................... 356

9.4 Projekt 4: Haus oder Katze? Vorgefertigte Modelle mit

Keras benutzen – VGG-19 ............................................................................................... 357

9.4.1 Schritt 1: Vorbereitung ..................................................................................... 358

9.4.2 Schritt 2: Instanziierung des VGG-19-Modells .......................................... 359

9.4.3 Schritt 3: Benutzung des Modells ................................................................... 359

9.4.4 Schritt 4: Benutzung weiterer Modelle und Tests .................................... 361

9.5 Projekt 5: Fashion-MNIST mit TensorFlow-Estimators ..................................... 364

9.5.1 Schritt 1: Modell erstellen mit tf.estimator ................................................ 364

9.5.2 Schritt 2: Modell anlegen .................................................................................. 366

9.5.3 Schritt 3: Modell trainieren und evaluieren ................................................ 370

9.5.4 Schritt 4: Vorhersage mit predict() ................................................................. 372

9.5.5 Schritt 5: Benutzung des Modells ................................................................... 373

9.5.6 Bonus: Alternativmodell mit einem DNNClassifier .................................. 375

9.5.7 Erweiterung .......................................................................................................... 377

9.6 Projekt 6: Stimmungsanalyse mit Keras ................................................................. 377

9.6.1 Schritt 1: Eingabedaten und Datenstruktur .............................................. 377

9.6.2 Schritt 2: Modell(e) erstellen ............................................................................ 381

9.6.3 Schritt 3: Modell trainieren .............................................................................. 382

9.6.4 Schritt 4: Modell benutzen .............................................................................. 383

9.7 Bonus: Sentiment-Analyse mit TensorFlow.js ...................................................... 384

9.7.1 Schritt 1: Die Benutzerschnittstelle erstellen und

das Modell laden .................................................................................................. 385

9.7.2 Schritt 2: Modell benutzen ............................................................................... 387

9.8 Allgemeine Tipps und Tricks .......................................................................................... 388

9.8.1 Datenanalyse ......................................................................................................... 388

9.8.2 Das Problem und die Aufgaben eines Modells korrekt definieren ..... 389

9.8.3 Wie viele verdeckten Schichten und Neuronen brauche ich? ............... 390

9.8.4 Die Falle des Overfittings bzw. Underfittings vermeiden ...................... 391

9.8.5 Datenaugmentierung und synthetische Daten ....................................... 392

9.8.6 Normalisierung der Daten ............................................................................... 392

9.8.7 Eingabedimensionen von Tensoren .............................................................. 393

9.8.8 Hilfe, es geht nicht! ............................................................................................. 394

6509.book Seite 12 Montag, 1. April 2019 5:40 17

Inhalt

13

10 Ausblick 397

10.1 Deep Learning in der Cloud ............................................................................................. 397

10.1.1 Google Cloud Machine Learning ..................................................................... 397

10.1.2 Microsoft Azure .................................................................................................... 399

10.1.3 Amazon Deep Learning-AMIs .......................................................................... 400

10.1.4 IBM Watson Services ........................................................................................... 402

10.1.5 Adobe Sensei ......................................................................................................... 403

10.1.6 Cloud oder nicht Cloud? ................................................................................... 404

10.2 Kunst mit Deep Learning ................................................................................................ 405

10.3 GAN und Stiltransfere mit Deep Learning .............................................................. 406

10.4 Musik mit Deep Learning ............................................................................................... 408

10.4.1 FlowMachine ......................................................................................................... 408

10.4.2 Magenta.js ............................................................................................................. 409

10.5 Videogenerierung mit Deep Learning ...................................................................... 410

10.6 Deep Learning einfacher gemacht .............................................................................. 411

11 Fazit 415

Index ........................................................................................................................................................ 419

6509.book Seite 13 Montag, 1. April 2019 5:40 17