 Ja, zunächst einmal ganz kurz, ich habe erfahren, dass, wenn man dem Vortrag beim Stream zuschaut, dass man dann leider meine Folien nicht sehen kann. Ich habe meine Folien aber bei Github hochgeladen, sodass man sich das herunterladen kann. Zumindest muss ein bisschen vorsichtig sein, es sind eigentlich keine Folien. Es ist ein Jupyter Notebook. Das ist so eine Art Notizbuch, in das man Text hineinschreiben kann und in das man auch Programmiercode hineinschreiben kann. Und dann kann man diesen Programmiercode in diesem Jupyter Notebook auch direkt ausführen. Es gibt also so ein paar Notizen und ein paar Bilder und die sind einfach in diesem Jupyter Notebook drin. Ich nehme an, falls jemand Visual Studio Code, also diese Open Source Version von Visual Studio verwendet, da gibt es auch einen Editor, der Jupyter Notebooks lesen kann und anzeigen kann. Also von daher hoffe ich, dass man an die Notizen auch so dran kommt. Der Link, ich weiß nicht, ob da irgendjemand mir helfen kann, diesen Link kurz zu veröffentlichen oder auf Twitter zu schicken oder so etwas. Der steht hier da, dass es GitHub kommen, Lk-reichel-f, IGA 2022. Genau, vielleicht kann das ja irgendjemand für mich kurz übernehmen, das zu veröffentlichen, damit man die Daten dran kommt. Oder ihr könnt euch auch gerne Fotos machen oder so etwas. Nur die Leute im Netz, die nur mich sehen und die Leinwand nicht sehen können, da wäre es natürlich toll, wenn man den kurz den Link schicken könnte. Okay, gut. Ja, ich fange einfach an. Wo kommt das her? Wie bin ich auf das Thema gekommen? Also ich unterrichte an der Berufsschule, Fachinformatiker und ich bringe denen Programmieren bei und Datenbanken und Linux und solche Sachen. Und jetzt gibt es einen neuen Lehrplan und jetzt ist das dritte Jahr, in dem dieser neue Lehrplan aktiv ist, der wird so von unten nach oben aufgebaut. Also vor zwei Jahren haben das die 10. Klassen bekommen, dann letztes Jahr die 11. und dieses Jahr die 12. Klassen. Und in den 12. Klassen wird nach verschiedenen Fachrichtungen unterschieden. Da haben wir da einmal die Anwendungsentwickler, die Software schreiben. Wir haben Systemintegratoren, die irgendwelche Netzwerke aufbauen und konfigurieren. Und dann gibt es eben auch einen neuen Beruf, der heißt Daten- und Prozessanalyse, also Fachinformatiker für Daten- und Prozessanalyse. Und da hab ich mir das angeschaut und gesehen, oh, da geht es um künstliche Intelligenz. Das, was neu ist, das finde ich immer spannend. Neue Dinge machen das Leben abwechslungsreich und deshalb hab ich mir das auch gleich mal angeschaut und wollte das machen. Und jetzt haben wir aber leider gar nicht so viele Schüler, die diesen Fachinformatiker für Daten- und Prozessanalyse, die da ausgebildet werden. Es sind tatsächlich so wenige Schüler, dass alle Schüler in ganz Bayern an einer einzigen Berufsschule zusammengefasst werden, nämlich in Erlangen. Und da hab ich mir gedacht, schade, ich hätte ja gerne mal unterrichtet, wenn man so ein spannendes, interessantes Thema hat, dann möchte man natürlich da was drüber machen und dann mit den Schülern arbeiten und die ganze Vorbereitung, die hilft nichts, wenn man keine Schüler hat und von den Schülern lernt man natürlich auch. Und dann hab ich natürlich mal die Betriebe gefragt und hab gesagt, wie schaut es denn aus? Würdet ihr denn solche Fachinformatiker, die künstliche Intelligenz lernen, würdet ihr die denn ausbilden? Und dann haben mir die Ausbilder gesagt, ja, das würden wir schon machen, aber wir haben niemanden, der die ausbilden kann, weil wir haben niemanden, der sich mit dem Thema auseinandersetzt bei uns in der Firma, der das noch kennt. Man hat gesagt, das kann eigentlich das nicht sein, denn es ist gar nicht so schwierig. Und das ist mein Talk heute, meine Frage, vielleicht auch an euch, vielleicht ist ja der eine oder andere dabei, der in dem Thema schon ein bisschen länger drin ist. Nämlich ist das nicht eigentlich trivial, was wir da machen. Zumindest Anwendungen, die man häufig im Alltag braucht, da komme ich dann noch dazu, was das sein kann. Gut, erstmal so ein kleiner Primer für die Leute, die mit maschinellem Lernen und neuronalen Netzen, die da noch nicht so zu Hause sind, mache ich eine kurze Einführung. Es gibt so ein Art Hello-Word für die Leute, die sich so mit maschinellen Lernen auseinandersetzen. Und das ist eine Datenbank, MNIST, dass irgendwas amerikanisch ist, da haben die einfach Ziffern gesammelt und wollten gerne, dass ein Computer diese Ziffern erkennen kann, damit man zum Beispiel Postkarten und Briefe, wo ein ZIP Code drauf ist, also eine Postdeitszahl, dass man diese Postdeitszahlen maschinell lesen und erkennen kann. Und das Schöne ist, man hat also hier viele tausend solcher Ziffern und die Ziffern sind alle gelabelt. Das heißt, da steht, also bei jedem, zu jedem Bild ist bekannt, welche Ziffer das eigentlich sein soll. Man hat nicht nur die Bilder, sondern zu jedem Bild weiß man auch, das ist eine 1 oder eine 5 oder eine 7 oder was auch immer. Und dieser Datensatz ist frei. Und an diesem Datensatz kann man einfach schnell mal was ausprobieren oder was lernen oder so Sachen, die so mit so optischer Erkennung zu tun haben. Die kann man da einfach mal damit herumspielen und gucken, ob man das einigermaßen gelöst bekommt. Und wenn man jetzt ein klassischer Programmierer ist und kriegt die Aufgabe, ah, pass mal auf, wir haben da lauter Bilder und bei diesen Bildern, die sind jetzt 28 mal 28 Pixel, grau wert, hell oder dunkel. Und erkennt du mal, was das für eine Zahl ist, dann würde ich als klassischer Programmierer sagen, oh, das ist eine ganz schön schwierige Aufgabe. Ich müsste mir irgendwie überlegen, was macht so eine Zahl aus? Das ist irgendwelche Vektoren, da wir versuchen zu erkennen und dann formen und knicke und solche Sachen und dann zu entscheiden, ist das jetzt so eine Zahl oder nicht. Das wäre etwas, wo ich sagen würde, oh, wenn ich das tatsächlich selber programmieren müsste klassisch, da hätte ich viel zu tun und lang zu tun, das wäre richtig viel Arbeit. Aber ich möchte euch gerne zeigen, wie man das mit Hilfe von so einem neuronalen Netz machen kann. Okay, das sind die Bilder. Genau. Und jetzt noch so, erst mal noch so zur Einführung, so ein bisschen Unterschied zwischen dem klassischen Programmieren und solchen neuronalen Netzen. Also beim klassischen Programmieren, da überlege ich mir, ich habe bestimmte Daten, eben zum Beispiel diese Bilder und ich muss dann selber Regeln aufstellen und diese Regeln, die kann ich die Maske abnehmen, das ist glaube ich das Privileg von, hörte mich noch. Okay, das ist das Privileg vom Vortragenden, ohne Maske zu sprechen. Also wenn ich als klassischer Programmierer daran gehe, dann haben wir die Daten, eben diese Bilder und ich muss selber die Regeln aufstellen, nachdem die Bilder bewertet werden und dann soll eben aus dem Bild auf einmal eine Zahl werden. Und wenn man diese maschinellen Lernensatz geht, dann arbeitet man ein bisschen anders, dann haben wir unsere Daten und wir wissen auch schon, was rauskommt. Wir sagen jetzt in jedem Bild, ach, pass auf, ich zeig dir mal das Bild, das ist eine 2, ich zeig dir dieses Bild, das ist eine 7 und dann geht mein System her und lernt aus diesen Daten und den Ergebnissen dazu die Regeln. Die Regeln werden also nicht ausgedacht, sondern die werden generiert. Das macht die Sache eigentlich so spannend und auch so effektiv oder so angenehm damit zu arbeiten, das macht es eben sehr viel einfacher, als wenn man sich selber die Regeln überlegen muss. Okay, so, jetzt kennen wir alle diesen Begriff Neuronales Netz und ich habe hier so einen Neuron mal aufgemalt und eigentlich würde ich jetzt am liebsten, vielleicht kann ich da, oh, wenn ich runtersteig, haben wir Akkordings, akustische Rückkopplung vermutlich, besser nicht, vielleicht kann ich den Mauszeiger wenigstens zeigen, der ist nicht so richtig dick. Na gut, also wir haben so einen Neuron und so einen Neuron hat irgendwie viele Eingänge und einen Ausgang und so ähnlich ist es mit unseren neuronalen Netzen, die wir in so einem Computerprogramm haben auch. So ein Neuronales Netz hat einfach viele Eingänge, die sind ja beschrieben als x1, x2, x3 und in diesen x1, x2, x3 sind irgendwelche Zahlen drin, irgendwelche Werte, die sind am Anfang zufällig belegt oder wenn wir ein Bild haben, dann werden wir diese einzelnen Pixel, die wir da haben, einfach in diese x1, x2, x3 eintragen, die Helligkeitswerte und dann werden diese Zahlenwerte multipliziert mit einem Gewicht und das Ergebnis von dieser Multiplikation, das kommt dann in ein neues Neuron hinein, das ist dann sozusagen das Ergebnis von dieser Rechnung und diesen Werten können wir dann weitergeben an die nächste Schicht und da gibt es wieder viele Eingänge, die multipliziert werden mit dem Gewicht und in das nächste neuronale Schicht reingehen und so weiter und so fort und eigentlich ist es eine einfache Rechenaufgabe, die wir da haben. Am Anfang haben wir die Pixel von dem Bild, multiplizieren jeden Pixel mit einem gewissen Gewicht und geben das Ergebnis an das nächste Neuron weiter und so geht das von Schicht zu Schicht und dann sagt das neuronale Netz, am Anfang ach, das was hier so aussieht wie eine 2, da rät es einfach mal und sagt, das ist eine 7 und dann sagt man dem neuronalen Netz, oh, da hast du dich getäuscht und weil du dich getäuscht hast, dann müssen wir die Gewichte alle ein bisschen anpassen, dass das Ergebnis mehr nach einer 7 aussieht als nach einer 2. Okay, ein bisschen weiter. Ich habe hier noch so ein Video, jetzt hoffe ich, der Ton ist abgeschaltet, ist schon mal gut. Also man kann auch, ich habe hier so ein Video verlinkt von YouTube und da kann man das ganz gut sehen. Also ihr seht hier erst einmal, ups, das machen wir noch weg, steuerung minus, wieso kriege ich das, ah, da kriege ich das weg, okay, geht fort. Also hier seht ihr noch mal diese 28 mal 28 Punkte und jeder von diesen Punkten hat so einen Zahlenwert, könnt euch vorstellen, ein dunkler Punkt hat eine Null, ein weißer Punkt hat eine 255 oder eine 1, je nach dem und die Werte dazwischen, was weiß ich, 0,5 oder 128 ist dann halt so ein mittleres Grau. Also man, wir haben einfach diese Punkte von dieser Zahl, die man da sieht, diese 9 und jetzt passiert etwas, was für mich jedenfalls, als ich da eingestiegen bin in dieses Thema sehr überraschend war, nämlich wir, da seht ihr nochmal hier diese Zahlenwerte für die Helligkeit, okay. Und wenn wir jetzt diese Pixel, wenn wir die jetzt übertragen wollen, ein neuronales Netz, dann, jetzt kommt es gleich, hoffe ich, schwupp die Wupp, dann spielt die räumliche Anordnung überhaupt keine Rolle, ja, wir packen einfach diese 784 Pixel an eine einzige lange Kette und es spielt überhaupt keine Rolle, welcher Pixel mit welchem benachbart ist, sondern wir füttern einfach bloß diese 784 Pixel in unser Netz hinein, vollkommen, ob der jetzt links oben ist oder rechts unten oder in der Mitte spielt, überhaupt keine Rolle und könnten die auch mischen, das macht keinen, macht keinen, keinen Unterschied. Okay, und jetzt seht ihr hier auf diesem Bild, so nochmal ein bisschen rein zu zoomen, ein bisschen mehr seht davon, seht ihr auf diesem Bild, dass dieses 784 Pixel, wo wir diese Helligkeitswerte am Anfang haben, die gehen dann in eine zweite Schicht rein, da haben wir glaube 16 Neuronen und noch eine dritte Schicht, da haben wir nochmal 16 Neuronen und in der letzten Schicht haben wir nur noch 10 Neuronen und denkt immer dran, da vorne in diese ersten Neuronen tragen wir den Helligkeitswert ein und dann von einem Neuron zum nächsten, da ist immer so ein Gewicht dran und dann multiplizieren wir einfach die Helligkeit von dem Pixel mit einem bestimmten Gewicht und es geht in diese nächste Schicht rein und dann haben wir da auf einmal 16 verschiedene Zahlenwerte und die gehen dann wieder in die nächste Schicht, wieder mit dem Gewicht, haben wir wieder 16 verschiedene Zahlenwerte und am Schluss haben wir nur noch zehn verschiedene Zahlenwerte und in diese zehn verschiedene Zahlenwerte, die stehen dann für die Ziffern von 0 bis 9 und wenn man das jetzt irgendein so ein Pixelpaket da hineinschickt, dann kommt am Ende in diesen letzten Schicht kommen einfach Wahrscheinlichkeiten heraus. Wir sagen einfach die Wahrscheinlichkeit dafür, dass diese Ziffer eine 9 ist, die ist vielleicht 83% und die Wahrscheinlichkeit, dass das eine 7 ist, die ist dann vielleicht noch 5% und dass das eine 2 ist, die ist dann vielleicht noch 3% oder so etwas und dann sucht man sich einfach das Neuron raus, was die höchste Wahrscheinlichkeit hat und sagt okay, dann ist das vermutlich eine 9, weil da die größte Wahrscheinlichkeit ist an der Stelle. Man kann immer so abschätzen, man kann auch so ein bisschen so eine Qualität feststellen, wie sicher ist das. Das Video ist noch nicht ganz fertig, wir sehen hier sind alle mit allen verbunden. Okay und damit das überhaupt mal loslegen kann, dieses neuronale Netz werden die Gewichte, die auf diesen Verbindungslinien sind, zufällig gewählt, zwischen 0 und 1 und dann merken wir, dass neuronale Netz rät falsch und dann tun wir die Gewichte entsprechend anpassen. Schauen wir mal was hier noch kommt, wenn ich es weiterlaufen lasst. Hallo, genau jetzt sind wir alle verbunden, damit die Zahlen von 0 bis 9 und ich glaube das war schon, mehr wollte ich euch da gar nicht zeigen. Okay, ist ein recht gutes Video, auf Englisch kann ich euch eigentlich nur empfehlen. So, jetzt möchte ich euch zeigen, wie man das ganze programm technisch macht und, oh ich sei nicht aufgepasst mit der Uhrzeit, okay nicht so schlimm. Und das Schöne ist, jetzt kann ich in meinem jubilter Notebook hier einfach so Zählen drin haben, da ist Python Code drin und wenn ich hier Shift-Return drücke, dann wird dieser Python Code ausgeführt. Ich kriege noch eine kleine Warnung, dass ich hier keine tolle Grafikkarte habe, aber wenn ich das ein zweites Mal mache, dann stört ihn das auch nicht mehr. Okay und was ich, das erste was wir hier machen müssen, wenn wir so solche Zahlen auswerten wollen, wir brauchen natürlich diese Bilder und da gibt es in Python wunderbare Bibliotheken, mit denen man irgendwelche Bilder einlesen kann und dann kriegt man die eben als Arrays von Pixeln mit Farbwert oder einfach Brusselligkeitswert oder so etwas und interessanterweise ist in der Bibliothek, die ich hier verwende, in TensorFlow, da ist sogar diese Mdis-Datenbank direkt drinnen. Also ich kann gleich sagen, ich möchte die Mdis-Datenbank haben, dann muss ich mir die nicht mal irgendwo herunterladen. Aber es ist genauso gut möglich, es gibt wunderbare Bibliotheken, mit denen man zum Beispiel Excel-Tabellen auslesen kann oder indem man sich eine Datenbank dran hängen kann, um an irgendwelche Daten zu kommen, um Bestwerte zu sammeln für sein Netz. Ich mach das mal kurz, ich lad hier die Daten herunter, schon passiert wahrscheinlich, herunter die in diesem Keras-Data-Set Mnist drin sind und ihr seht, so als wenn man so Python-Programmierung gewohnt ist, dann merkt man, okay in so einem Python kann man mehrere Variablen gleichzeitig füttern mit so einem Runterladevorgang und die Variablen, die wir hier haben, werden aufgeteilt in Trainingsdaten. Trainingsdaten sind einmal die Bilder natürlich und zum anderen die zugehörigen Ziffern, damit man sagen kann, ich habe hier ein Bild und dieses Bild, das soll für dich eine drei sein oder ein anderes Bild, das ist für dich eine sieben. Und man nimmt aber nicht alle Daten, die man hat zum Trainieren, sondern man packt auch einen Teil der Daten zum Testen. Und was man nicht möchte ist, dass man mit denselben Daten trainiert und testet. Das ist so ähnlich wie wenn man irgendwo, nehmen wir an, wir würden Mathe unterrichten und in Mathematikunterricht hätten wir immer die gleiche Aufgabe, zwei und drei ist fünf, vier und sieben ist elf und dann in der Schulaufgabe wird auch genau das Gleiche gefragt, was ist vier und sieben und was ist zwei und drei und dann muss man das nur auswendig lernen. Deshalb trennt man die Daten in Trainingsdaten, mit denen wir das neuronale Netz schulen und in Testdaten, indem man dann überprüfen, erkennt es denn andere Ziffern auch und zu welchem Anteil, wie viel Prozent der Ziffern werden richtig erkannt. Und wenn man zu viel trainiert, dann tendiert auch so ein neuronales Netz dazu solche Sachen auswendig zu lernen und das ist natürlich Quatsch, wir wollen nicht was auswendig gelernt ist und wir wollen was was allgemein und generell funktioniert. Deshalb wenn die zu viel trainiert werden, dann werden die schlechter, wenn sie nicht richtig, also wenn man dann testet. Gut, also ich hoffe mal, dass das hier geklappt hat, weil er hatte ich früher immer eine schöne Meldung, wenn ich das ablaufen lassen, aber scheint zu klappen. Okay, so jetzt müssen wir die Daten noch ein bisschen umbauen von den arrays her. Das ist auch nur eine Hilfspfunktion, die jetzt aus meinem dieses array, das wir da bekommen haben, so umbauen, dass wir halt immer Pakete haben mit 28 mal 28 Pixel, für jedes Bild. Und jetzt können wir uns das auch anschauen. Dieser Kote dient nur zum Veranschaulichen von den Daten, die wir hier geladen haben. Und jetzt seht ihr hier, okay, das erste Bild links oben, das ist eine 9 und das Label dazu ist auch eine 9 und eine 3 und noch eine 3 und noch eine 3 und eine 4 und eine 6 und eine 8 und eine 9. Also ihr seht hier immer das Bild und das zugehörige Label, das steht oben drüber. Das sind meine Daten, mit denen ich trainiere. Gut. Ja, jetzt kommt das neuronale Netz. Ich importiere mir wieder ein paar Sachen aus der Bibliothek, aus dieser TensorFlow Bibliothek. Und dann wird das Modell aufgebaut. Kommt noch mal so eine Meldung, dass ich hier keine so schicke Grafikkarte habe, ist nicht so schlimm. Aber der Aufbau von dem Modell ist eigentlich sehr, sehr einfach. Ihr seht, ich sage erst mal, ich möchte so ein Modell sequenziell aufbauen, also eins nach dem anderen. Und dann füge ich hier, könnte das einigermaßen lesen, den Code. Dann füge ich hier einfach eine so eine neuronale Schicht dazu. Und ich sage bei der ersten Schicht, pass mal auf, diese erste Schicht, die hat hier 784 Eingänge. Das sind meine Helligkeitswerte von den Pixeln. Und die hat 16 Ausgänge. Die 16 habe ich einfach deshalb gewählt, weil den Video auch 16 haben. Und dann gibt es noch so was, das nennt sich Aktivierungsfunktion. Da muss man auch nicht viel drüber wissen über die Aktivierungsfunktionen. Diese Relu-Aktivierungsfunktion ist zum Beispiel sehr, sehr einfach. Die sagt einfach bloß, das Ergebnis von negativen Zahlen ist null. Und bei positiven Zahlen ist es die Zahl selber. Also Relu von 5 ist 5. Und Relu von minus 3 ist null. Diese Aktivierungsfunktion, die werden immer noch, nachdem wir das ausgerechnet haben mit diesen Gewichten, da werden diese Aktivierungsfunktion immer noch dahinter gerechnet. Man muss sich gar nicht so viel damit auseinandersetzen. Dann probiert einfach mal das, was so gängig ist und kommt damit schon relativ weit. Gut. Dann haben wir unsere Schichten. Und am Schluss möchte ich noch so eine Aktivierungsfunktion haben, die heißt Softmax. Und diese Softmaxfunktion, die macht dann am Schluss als Ergebnis diese Wahrscheinlichkeiten. Die sorgt also dafür, dass die Summe von den Werten in der letzten neuronalen Schicht, dass die Summe der Werte 1 ist, so dass das mit der größten Wahrscheinlichkeit von mir aus ist, dass dann 0,8 und das mit der kleineren Wahrscheinlichkeit dann 0,1 oder 0,05 oder so etwas, dass die Summe von diesen Ergebnissen der letzten Schicht einfach nur 1 ist. So, dann sage ich meinem Modell noch kurz, pass auf. Ich benutze ja irgendein Optimizer. Erden benutze ich deshalb, weil alle Erden benutzen, muss ich zugeben. Und diese Lossfunktion, die ist noch wichtig, insofern, als dass wir immer einen Loss berechnen. Das heißt, es, wenn man jetzt dem neuronalen Netz etwas zu trainieren gibt, dann sagt die Lossfunktion, wie gut oder wie weit hast du daneben geschossen? Ist das ein gutes Ergebnis oder ein schlechtes Ergebnis? Zum Beispiel, wenn wir Mietpreise vorher sagen wollten in der Stadt Bamberg, könnten wir auch ein neuronales Netz trainieren, sagen dem neuronalen Netz, ach, wie weit bist du weg vom Bahnhof? Wie weit bist du weg vom Maxplatz? Wie weit bist du weg von der Uni? Wie viel Quadratmeter hast du? Wie viel Bäder hast du? Wie alt ist das Gebäude? Und dann könnten wir zum Beispiel dieses neuronale Netz dahin trainieren, dass es ein Mietpreis bestimmt. Geben einfach die Mieten ein, die in der Stadt da sind, so ein Art Mietspiegel. Und dann könnten wir, wenn wir eine neue Wohnung haben und bewerten wollen, dann könnten wir diese Daten in so ein neuronales Netz hinein füttern. Und dann hätten wir nur ein Ausgabe Neuron, was uns den Preis geben würde. Und die Lossfunktion, die könnte dann zum Beispiel beschreiben, einfach den Unterschied zwischen der tatsächlichen Miete und der Miete, die das System vorher gesagt hat. Und je größer der Loss, das heißt also, desto mehr liegt mein neuronales Netz daneben und je kleiner der Loss umso besser habe ich getroffen. Mieten kann man vielleicht auch nicht mehr perfekt treffen. Okay, dafür brauchen wir es. Und ich habe hier eine Lossfunktion, die einfach bloß sagt, ach, wir möchten gerne, dass ich am liebsten habe einen Wert mit 100 Prozent und die alle anderen sind null. Das ist für mich das Optimum. Und das schlechteste, was es sein könnte, wäre, dass ich zehn verschiedene Ziffern habe und jede Ziffer ist zu zehn Prozent Wahrscheinlichkeit die richtige Ziffer. Das wäre dann der größte Loss. Da kann man so ein bisschen rumgucken, gibt es ein Katalog von Lossfunktionen, was die tun und wie die funktionieren, steht in der Bibliothek. Und dann setze ich die einfach ein. Gut, wenn man will, kann man sich ja noch so einen Summary ausgeben lassen. Und jetzt sehen wir bei der Summary, wie viele Parameter hat mein neuronales Netz. Und das ist einfach die Zahl der Gewichte. Und an der letzten Schicht hier seht ihr etwas, was vielleicht ganz interessant ist, wo man relativ schnell drauf drüber noch sprechen kann, nämlich die letzte Schicht. Da kommen ja von dem Netz vorher 16, haben wir 16 Neuronen und die sind verbunden mit den zehn Neuronen im Ausgang. Das heißt, da habe ich eigentlich zehn mal 16 Parameter zum Einstellen. Und was steht da? 170. Da steht deshalb 170, weil jedes Neuron immer noch ein extra Eingang hat. Ein Eingang, wo der Wert 1 anliegt und wo man für das man auch einen Gewicht herstellen kann, weil nehmen wir mal an, wir haben so einen schwarzen Fleck in unserem neuronalen Netz auf dem Bild, schwarzen Fleck in dem Bild, dann hat es eine Helligkeit 0. Und wenn ich eine Helligkeit 0 habe und multipliziere diese Helligkeit 0, dann kann das Gewicht so groß sein, wie ich es will. Es wird immer eine 0 rauskommen. 0 mal einem beliebigen Gewicht ist immer noch 0. Deshalb hat jedes Neuron noch so einen extra Eingang, nennt man Bayes und da ist eine 1 dran und dann kann man auch da das Gewicht noch verändern. Deshalb kommt 170 raus statt 160. Okay. Insgesamt muss jetzt, wenn ich mein neuronales Netz trainiere, hier ungefähr 13.000 Gewichte angepasst werden. Und am Anfang sind die Gewichte einfach mit Zufallszahlen belegt. So, jetzt fangen wir mal an, das zu trainieren. Und das trainieren geht nicht so wahnsinnig schnell. Ich habe dem gesagt, er soll hier einfach mal 15 Mal den kompletten Datensatz durchkauen und die Gewichte anpassen und das Ding rechnet und rechnet und rechnet und deshalb verwundert es auch nicht. In meinen Augen, das Firmen wie zum Beispiel Intel zur Zeit die Werbetrommel für neuronale Netze und künstliche Intelligenz rühren, maschinelles Lernen, weil da gibt es einfach immer viel zu rechnen. Also, wenn ich eine Grafikkarte hätte, dann wäre das Ding sicherlich schneller. Jetzt läuft das einfach nur auf so einem Risen 4000 irgendwas. So, haben wir hoffentlich gleich durch. Die Zeit 13.08, okay. 14, 15. Letzter Durchgang. Jetzt schauen wir mal, wenn man die noch ein bisschen kleiner macht, ob man dann mehr sieht. Ja, da sieht man ein bisschen mehr. Also, wenn der die Durchgänge macht, dann sehen wir hier noch einen Loss. Der fängt da an mit 0,39 und je besser das System gelernt hat, umso kleiner wird der Loss. Von oben nach unten wird es immer kleiner und dann haben wir noch einen Validierungsloss, wo überprüft wird mit den Testdaten. Wie groß ist bei den Testdaten der Loss? Dann seht ihr der Testdatenloss interessanterweise am Anfang sogar kleiner als der von dem Netz. Das ist Zufall und auch der wird immer kleiner, aber typischerweise ist halt der Loss auf den Daten, mit denen wir trainieren kleiner als der von den Testdaten. Und wenn wir jetzt das länger trainieren lassen, dann wird auf einmal der Loss auf den Testdaten wieder größer, weil sich mein neuronales Netz so spezialisiert auf die paar Testzahlen, mit denen es geübt hat. Und jetzt mache ich einfach Folgendes. Ich lasse jetzt, gebe mir jetzt zufällig wieder Bilder raus aus diesem Testdatensatz, lasse das neuronale Netz diese Bilder bestimmen und zeige dann an, was das neuronale Netz hier gefunden hat. Und die einzige wichtige Zeile an der Stelle, wenn man sein neuronales Netz etwas bestimmen lassen möchte, das ist Modelpunkt Predict und dann gebe ich ihm hier eine gut verdauliche Form von einem beliebigen Bild mit und dann gibt mir dieses Modelpunkt Predict, die zehn Werte zurück von der letzten Schicht und in den zehn Werten steht drin, mit welcher Wahrscheinlichkeit ist es eben eine Null, mit welcher Wahrscheinlichkeit ist es eine 1, eine 2, eine 3, eine 4 und dann sage ich hier noch mit diesem NP-Argmax, lasse ich mir noch zurückgeben, welches ist denn, an welcher Stelle ist der höchste Wert? Ich möchte einfach noch wissen, wo ist die größte Wahrscheinlichkeit und das ist dann gleichzeitig der Name von der Ziffer. Probieren wir erst mal kurz aus, da muss man kurz mal ein bisschen rechnen und wo ist es, das ist da drin, okay und jetzt sehen wir hier, habe ich wieder hingeschrieben, was hat das neuronale Netz geraten zu den entsprechenden Ziffern und bei einer Stelle seht ihr hier in der zweiten Reihe des zweite Bild, da hat also das neuronale Netz geraten, es sei eine Null oder andersrum soll und ist, erst habe ich soll, also es offiziell ist es eine Null und das neuronale Netz hat es für eine Acht gehalten und ich glaube, das ist nachvollziehbar bei dem einen Bild, dass man das, ob man das Null oder eine Acht ist, da kann man drüber streiten, können wir mal schauen, ob es da noch andere Bilder gibt, da unten haben wir noch mal eins, wo das verschieden ist, da wurde eine Eins für eine Acht gehalten, okay, weil scheinbar eine Acht viele Pixel hat oder dick ist oder was auch immer, ihr seht, es ist nicht perfekt, aber man kann nachvollziehen, warum eventuell das neuronale Netz hier an diesen beiden Stellen eben zu einem anderen Ergebnis kommt als das Label, Trefferkut ist aber gar nicht schlecht. Gut, jetzt möchte ich nochmal kurz zusammenfassen, rekapitulieren, was habe ich eigentlich gemacht oder was müsstet ihr machen, wenn ihr das selber machen wollt? Laden uns die Daten, wir bringen die Daten in eine bestimmte Form, das ist alles nicht so schwierig, heißt nur, dass ich irgendwelche Arrays in ein anderes Format bringe, dass ich aus dem 1-dimensionalen Array, 2-dimensionales Array mache oder irgend sowas dieses Daten in Form bringen, dann haben wir die Daten grafisch dargestellt, das müsst man ja gar nicht zwingend machen, das ist einfach bloß, damit man weiß, was habe ich denn dafür Bilder und damit man so eine Einschätzung finden kann, was könnte man damit anfangen oder wie sehen die aus, was kann ich damit tun? Dann bauen wir das Netz, das habe ich ja einfach den Kot nochmal kurz hineinkupiert, sagen sequenzieller Aufbau, ich sage, ich möchte hier diese erste Schicht haben, die diese 784 Pixel nimmt und die nächste Schicht hat 16 Neuronen, dann nochmal eine Schicht mit 16 Neuronen und dann nochmal eine Schicht mit 10 Neuronen, so und dann wird das Ganze irgendwie kompiliert zusammengesetzt mit einem Optimizer und einer Losfunktion und dann bin ich fertig. Die einzige Frage, die sich mir stellt ist, warum brauche ich vier Schichten? Also Input-Schicht ist klar, Output-Schicht ist auch klar, aber zwei verborgenen Schichten dazwischen und die andere Frage ist, warum haben diese verborgenen Schichten genau 16 Neuronen und die Antwort ist, es gibt keinen festen Grund, der soweit ich weiß, bekannt ist, sondern das sind Erfahrungswerte. Also verschiedene Leute haben einfach mal gesagt, wir probieren mal aus, drei neuronale Schichten zu machen. Wir machen es mal mit vier Schichten, wir machen es mal mit nur einer verdeckten Schicht. Wir probieren mal aus, wenn wir dazwischen vielleicht erst mal 50 Neuronen haben und dann nur noch fünf ist vielleicht zu wenig, aber 50 und dann vielleicht 17, keine Ahnung und das einzige, was wirklich festgenagelt ist, ist die Zahl der Input-Neuronen, die ist ja festgenagelt durch die Zahl der Pixel und die Zahl der Output-Neuronen, nämlich dass ist die Zahl der verschiedenen Ergebnisse, die ich haben will, für zehn Ziffern, zehn verschiedene Output-Neuronen und das dazwischen, das ist Erfahrungswissen. Ich kenne jedenfalls keine Veröffentlichung oder keine Beschreibung, wo irgendjemand, der sich mit künstlicher Intelligenz auseinandergesetzt hat und neuronalen Netzen, wo der sagt, ja bei dem Problem kannst du einfach aufgrund von denen und den Gründen sagen, hier sind 16 Neuronen die ideale Anzahl. Also dafür gibt es scheinbar nichts, was man irgendwo an einer Universität mit höherer Mathematik oder sonst wie lernen kann, um die Zahl, eine sinnvolle Zahl für die Neuronen dazwischen zu bestimmen. Nichts anderes als Erfahrungswissen. Okay, so, dann haben wir das Netz noch trainieren lassen und am Schluss haben wir eben uns aus dem Netz ein Bild gegeben und gesagt, für welche Ziffer ist die höchste Wahrscheinlichkeit da und bitte sag mir diese Ziffer, das war es. Wenn man sich das so anguckt, dann kann man tatsächlich sich mal an einem Abend hinsetzen, das ein bisschen durchgehen und sich anschauen und auf einmal habe ich an einem Abend, wo ich ein bisschen Zeit hatte, einfach so ein Programm geschrieben, was Ziffern erkennen kann, was ich sonst sicherlich nicht in der Kürze der Zeit geschafft hätte, mit Vektoren und sich zu überlegen, wie und was und wo. Das macht es in meinen Augen so spannend und interessant. Okay, ich habe mir noch mal aufgeschrieben, welches Expertenwissen ist nötig. Die Zahl der Input Neuron haben wir gerade gesagt. Die Hidden Layer zwischen Input und Output sind Erfahrungssache. Die Zahl der Output Neuron ist die Zahl der Ergebnisse. Für die Aktivierungsfunktion gibt es so ein paar typische Beispiele, an denen man sich erst mal orientieren kann. Der Optimizer, da hängt ein bisschen Mathematik drin, wo man sagt, da müssen wir irgendwie in einem endimensionalen Raum eine Steigung berechnen und gucken, wo es in welcher Richtung geht es am steilsten nach unten mit dem Los. Das ist alles versteckt in der Bibliothek. Da musste ich mich also auch nicht miteinander setzen. Ich muss also keine höhere Mathematik können, um mit neuronalen Netzen sinnvoll arbeiten zu können. Genau. Und das Einzige, was noch wichtig ist beim Trainieren, wenn wir zu viel trainieren, bekommen wir ein Overfitting und dann lernt dann ein Netz auf einmal die Ziffern auswendig. Das wollen wir nicht. Noch ein kleines, wie viel Zeit haben wir noch? 13 Uhr, 18. Dann habe ich noch zwei Minuten oder bis 30, bis halb. Da können wir vielleicht auch noch fragen. Sollte ich jetzt lieber schnell machen bis 40, aber dann sind wir entspannt. Danke. Okay, ein anderes Beispiel, was ich euch zeigen möchte, da geht es um einen Shrinkrapper, also so Schrumpffolienmaschine. Bei dieser Schrumpffolienmaschine, da schiebt man irgendwas rein, von mir aus Getränkeflaschen und dann werden die Getränkenflaschen in so eine Schrumpffolie drum herum gemacht und die wird dann abgeschnitten und mit heißer Luft irgendwie zusammen gedingst. Dann bekommt man diese Getränkepakete, die ihr kennt aus dem Discounter, so Plastikflaschen in so einer Tüte, in so einem Paket. Und so ein Shrinkrapper, wenn der gut gemacht ist, dann verpackt er sehr viele Flaschen in einer Stunde, da hat er richtig gut zu tun. Der ist auch richtig teuer und man möchte bei so einem Shrinkrapper natürlich nicht, dass der in der Produktion ausfällt, dass er auf einmal kann der Zifolie nicht mehr schneiden, weil das Messerstumpf ist und dann steht alles und dann muss die ganze Produktion angehalten werden. Das ist sehr teuer und weil der Shrinkrapper selber auch teuer ist, sollte am liebsten 24 Stunden, 7 Tage, die Woche laufen. Also möchte man diese Messer auch nicht unbedingt mal so auf Vorrat tauschen, sondern man möchte die so selten tauschen wie möglich. Und deshalb hat der Hersteller von diesem Shrinkrapper gesagt, ich möchte gerne, dass wir ein System mit maschinellem Lernen, dass wir das füttern mit Messwerten aus der Maschine und anhand von den Messwerten sollen wir bestimmen, wie alt ist das Messer? Muss ich das Messer? Ist das Messer schon am Ende seiner Laufzeit? Muss ich das Messer jetzt heute Abend tauschen? Müssen wir die Produktion kurz mal anhalten, um das Messer zu tauschen? Oder können wir das Messer einfach noch zwei Wochen lang weiter benutzen? Und die Daten, die man dazu bekommt, die sind hier gerade, das Bild kaputt, aber ich habe die Quelle. Schauen wir mal, weil da dran kommen Shrinkrapper, die Daten, Bild in einem neuen Tapp öffnen. Guck mal hier, die sehen ungefähr so aus und das sind jetzt diese Kurven, die da ablaufen, während dieser Shrinkrapper da so eine Folie schneidet. Das eine ist die Kraft, die das auf das Messer einwirkt. Das ist, glaube ich, diese graue Kurve und dann gibt es noch so Lagefehler. Also die Folie ist nicht genau am richtigen Ort, das Messer ist nicht genau am richtigen Ort, wo sein soll. Das sind dann diese blaue und die rote Kurve. Und jetzt kann man natürlich auch sagen, lasst uns noch mal trainieren. Wir gucken einfach mal, wie so ein Messer immer älter wird und älter wird und schauen, wie sich dann diese Kurven verändern mit der Zeit. Aber wenn wir jetzt diese Kurven einfach nur in ein neuronales Netz hineinkippen, so wie unsere Pixel, dann kommt das neuronale Netz nicht so einfach zum richtigen Ergebnis. Es tut sich sehr schwer, das zu lernen und das Problem ist, dass wir diese Lockdaten, das ist einfach bloß eine Reihe von Zahlen und wir müssen eigentlich diesen neuronalen Netz helfen. Wir können im neuronalen Netz schon mal damit helfen, dass wir sagen, okay, wir verschieben diese Kurve immer so, dass sie an einem bestimmten Stelle anfängt. Ihr seht zum Beispiel, da gibt es bei dieser Kurve mit der Kraft so einen Ausschlag nach unten, wo das graue Ding da so weit in diese Zacke nach unten ist. Wir könnten erst mal sagen, okay, wir verschieben diese ganze Kurve so, dass diese Zacke, die nach unten geht, dass die sozusagen beim Neuron mit der Nummer 0 oder 1, dass das der erste Wert ist, den ich in mein neuronales Netz füttere. Dann kann diese Kurve ja gestaucht sein oder gedehnt, kann lang oder kurz sein, dann wäre es vielleicht sinnvoll, die Länge von dieser Kurve von einem, von einem Pieck bis zum nächsten Pieck, dass wir diese Länge in unser neuronales Netz einfügen. Weil vielleicht arbeiten wir in Maschinen mit dem stumpfen Messer einfach langsamer. Dann ist einmal die Zeit interessant, die wir da haben von einer Spitze bis zur nächsten. Und dann sollten wir vielleicht diese Kurve auch selber normieren, dass die Zahl der Neuronen vom ersten Pieck zum zweiten Pieck immer dieselbe ist, damit immer dasselbe Neuron den selben Teil von der Kurve bekommt. Wir müssen also diese Daten irgendwo mit Hirnschmalz und mit klassischen Programmiertechniken so aufbereiten, dass das neuronale Netz, die auch vernünftig lernen kann. Und ich habe schon mal mit so einem Data Scientist gesprochen, die sagen häufig ist 80 Prozent der Arbeit des Sammeln und Aufbereiten der Daten und nur 20 Prozent der Arbeit ist überhaupt das neuronale Netz zu betreiben, zu füttern, zu einzustellen und zu optimieren. Also deshalb meine ich, dass die klassischen handwerklichen Programmiertekenntnisse, die man so klassischer Programmierung hat, die bleiben weiterhin wichtig. Wir können nicht einfach überall immer nur die Daten in so neuronales Netz hinein kippen und gucken, was rauskommt, sondern wir müssen das oft anpassen, dahingehend, dass das Netz auch gut lernen kann. Also mit anderen Worten, ich wiederhole meine These, die Nutzung von neuronalen Netzen für Programmierer ist eigentlich trivial und wir brauchen natürlich klassische Programmierkenntnisse, um die Daten aufzubereiten und es gibt so viele tolle Themen, die man mit so einem einfachen neuronalen Netz vielleicht bearbeiten und angucken könnte, als eine war ja die Predictive Maintenance bei der Maschine, aber ich denke jetzt zum Beispiel hier an die Firmen in der Umgebung, welche Kunden werden denn voraussichtlich die Rechnung bezahlen und welche nicht, könnte man ja Kundendaten und Probleme mit der Rechnungsstellung in ein neuronales Netz füttern und würde dann bei Kunden, bei denen die Gefahr groß ist, dass sie ihre Rechnung nicht bezahlen, einfach Vorkasse verlangen, eine Möglichkeit. Kann man ethisch natürlich fragen, ist das sinnvoll oder nicht? Nein, aber ich meine, wir dürfen die andere Seite auch nicht außer Acht lassen, irgendein Handwerksbetrieb oder so etwas, wenn die Kunden ihre Rechnung nicht zahlen, dann kann die Firma am Ende ihre Mitarbeiter nicht bezahlen. Geht Pleite, also was ist da richtig und was nicht? Ich glaube, es gibt Interessen auf beiden Seiten, beim Kunden wie beim Betrieb. Oder nehmen wir an eine Bäckerei. Bäckerei hat das Problem, wenn sie zu viel Brötchen backen, am nächsten Tag sind die Brötchen alt, dann will sie keiner mehr haben oder man kann sie nur zum Sonderpreis verkaufen. Was wäre denn, wenn wir jede Brötchen-Sorte korrelieren mit dem Wetterbericht von morgen? Wir wissen, ah, morgen wird vermutlich die Sonne scheinen, dann werden viele Brezeln verkauft oder morgen ist Regenwetter angesagt, dann brauchen wir viel Teegebäck, weil die Leute zu Hause sitzen und Tee trinken. Man könnte ja mit der Zeit lernen, je nach Wetter und solchen Parametern wie Wochentag und so weiter und so fort, wie viel von welchem Artikel wird denn verkauft? Warum nicht? Könnten wir in so ein neuronales Netz hineinfüttern und lernen? Oder was ich gerne hätte, bei mir an der Schule, ist immer das Problem, draußen schneit und dann tröpfeln die Schüler rein, so der eine um 57, der nächste um 8.00 Uhr, denn übernächste um 8.00 Uhr 15. Jetzt wollen die Schüler natürlich nicht alle früher aufstehen als nötig, also könnte man ja ein neuronales Netz so trainieren, dass man die Weckerzeit und die Ankunft in der Schule mit dem Wetter korreliert wieder und den Straßenverhältnissen Wochentag, sodass der Wecker nicht früher klingelt als unbedingt nötig und die Schüler trotzdem um 8.00 Uhr im Klassenzimmer sind. Wer vielleicht eine interessante Aufgabe, je nach Strecke und so weiter? Genau und selbstverständlich, wenn man hier an sowas denkt, wie die Veranstaltungen, wo wir gerade sind, auch da könnte man sich natürlich überlegen, je nach Umweltbedingungen, wie viel Mathe brauchen wir, bei welcher Musik und bei welchem Thema in der intergalaktischen Erfahrungsreise. Könnte man ja auch versuchen, mit der Zeit zu lernen. Genau und deshalb komme ich nochmal, versuche nochmal zu den Bogen zu schlagen, zurück zu sagen, okay, wir brauchen irgendwelche Daten, wir müssen uns überlegen, wo kriegen wir die Daten her? Soll ich bei meiner Bäckerei einfach mal fragen, können die nicht jeden Tag in ihrem Computer notieren, wie viele Brezeln haben sie verkauft und wie viele Rosinenbrötchen und wie viele Kuchenstücke und das Wetter dazu erfassen. Dann behaupte ich, die Nutzung von diesen maschinellen Lernwerkzeugen ist gar nicht so schwierig und eigentlich, denke ich, müssen wir alle Erfahrungen sammeln, ausprobieren, was geht und was nicht geht. Genauso wie wir ja auch Erfahrungen gesammelt haben bei der Softwareentwicklung mit irgendwelchen Patterns oder irgendwelchen Dingen, wie teile ich mein Programm gut ein, was funktioniert gut und was nicht, wie schreibe ich gute Software und genauso, denke ich, müssen wir das auch machen bei dem maschinellen Lernen und mein Appell tatsächlich an die Betriebe, um da nochmal zurückzugehen und natürlich auch an euch ist, keine Manschetten zu haben, sondern das einfach mal auszuprobieren. Es ist gar nicht so schwierig, wie es vielleicht scheint und jetzt würde ich gern wissen von euch, vielleicht ist ja jemand da, der mit KI erfahren ist, maschinelles Lernen erfahren ist, seht ihr das genauso oder war das jetzt alles Bullshit? Bitte schön. Gibt es Fragen, Anmerkungen, Vorschläge? Also das eine ist ja jetzt erst mal nur damit zu spielen, aber das andere ist, wenn die halt tatsächlich eingesetzt werden, was wenden jetzt noch so interessante Strategien, also bei den Zahlen zum Beispiel, könnte ich ja drei oder vier Parallel laufen lassen und jedes Mal, wenn ich merke, dass die vier unterschiedlicher Meinung sind, Menschen dranlassen, um mal zu gucken, okay, wie problematisch ist eine falsche Entscheidung, aber so ein predictive Maintenance dann zum Beispiel, wo es ja auch darum geht, die Wartung zu vermindern und sozusagen das Letzte aus der Maschine rauszukitzeln, ich weiß nicht, bei welchen Maschinen ich das haben möchte, beim Zugverkehr wahrscheinlich weniger, eine Maschine, die irgendwo rumsteht, wo keiner drum rumläuft, wenn das Messer dann durch die Gegend fliegt, weil es abricht oder so, dann ist halt irgendwo in der Wand stecken geblieben, aber kein Mensch gefährdet oder so. Wie kann man sozusagen dann auch gleich benutzen, so Sicherheitskonzepte, wie kann man die miteinander verschalten, die Dinger? Also da kann ich jetzt ein Stück weit, werden wir tatsächlich einen Betrieb, der solche Schüler schickt, die so Daten- und Prozessanalyse betreiben und das ist die SKF in Schweinfurt, die Kugellager bauen und die haben natürlich ein Thema damit, dass zum Beispiel ein Windrad mit einem SKF-Kugellager bedient wird und dann wollen die einfach wissen, wie lang hält dieses Kugellager, bevor man es austauschen muss, damit niemand das Windrad auf den Kopf fällt. Und die haben zum Beispiel dann große Teststände und die sammeln in den großen Testständen dann, ich weiß, peterweit beise Test-Messdaten und füttern die dann in ihre neuronalen Netze hinein. Also das ist natürlich immer die Frage, ob man das im laufenden Betrieb machen kann oder nicht und das ist sicherlich ein wichtiger Einwand, den du da bringst, das weiß ich bei einem Zug. Wenn man da sagt, wir setzen die Wartung aus und warten einfach so lange, bis die Dinger kaputt gehen, muss man halt wissen, ob das einfach nur eine Tür ist, die man dann nicht mehr aufkriegt oder ob das ein Fahrgestell ist und dann sitzen nachher die Fahrgäste im Schotterbett mit gebrochenen Knochen, aber da weiß ich keine spezielle Strategie in dem Sinn. Was vielleicht noch wichtig ist mit des teuerste oder aufwendigste an dem, an diesen Lernprozessen ist dieses Labeln, dass wir hier zum Beispiel diese 10.000 Ziffern haben und da muss sich jemand hinsetzen, allen 10.000 Ziffern zuordnen, ist das jetzt eine 1 oder eine 3 oder eine 5 und da erfährt man manchmal interessante Strategien. Ich weiß nicht, bin ich zu lang ausführen, wenn noch eine Frage ist, sonst würde ich einfach noch kurz erzählen, genau es gibt ja mittlerweile diese Sprachmodelle, wo die also Unmengen von Texten, Unmengen von Texten in so neuronales Netz hineinfüttern, dann soll das auf einmal Sprache lernen und Texte erzeugen und das funktioniert überraschend gut, erschreckend gut vielleicht auch inzwischen. Wir haben die, wir haben ihre Daten gelabelt, die haben einfach Unmengen von Text genommen, zum Beispiel aus der Wikipedia oder aus irgendwelchen Zeitungen oder so etwas und haben in jedem Absatz ein Wort weggelassen und dann sollte das neuronale Netz erraten, was ist das fehlende Wort und auf einmal hatte man gelabelte Daten, wir haben ja den Text, wir schneiden einfach aus dem Text ein Wort raus, ein zufälliges und dann kann das neuronale Netz versuchen, dieses Wort zu erraten und auf die Art und Weise habe ich auf einmal Unmengen von Trainingsdaten, die ich nicht selber labeln muss und das sind so Techniken, wo die immer dran suchen, versuchen möglichst, möglichst viele Trainingsdaten zu bekommen. Gut, weitere Fragen, keine Fragen mehr? Ja, dann bedanke ich mich bei euch fürs Zuhören, für Aufmerksamkeit und ich würde mich sehr freuen, wenn der eine oder andere sozusagen sich das mal zum Anlass nimmt und sagt, okay, habe ich bisher noch nie gemacht, neuronales Netz trainiert und ausprobiert, aber es ist gar nicht so schlimm, wie es vielleicht ausschaut. Okay, schönen Tag noch!