{"id":341,"date":"2018-04-27T19:47:28","date_gmt":"2018-04-27T17:47:28","guid":{"rendered":"https:\/\/lobo.mensa.uberspace.de\/wp\/?p=341"},"modified":"2018-05-29T14:31:37","modified_gmt":"2018-05-29T12:31:37","slug":"stroemende-tensoren","status":"publish","type":"post","link":"https:\/\/lobo.uber.space\/wp\/?p=341","title":{"rendered":"Str\u00f6mende Tensoren"},"content":{"rendered":"<div class=\"ArtikelSerie\">\r\nDies ist der erste Teil der Artikelserie <em>Str\u00f6mende Tensoren<\/em>.\r\n<ul class=\"ArtikelListe\">\r\n<li><a href=\"https:\/\/lobo.mensa.uberspace.de\/wp\/?p=341\">Teil 1<\/a><\/li>\r\n<li><a href=\"https:\/\/lobo.mensa.uberspace.de\/wp\/?p=386\">Teil 2<\/a><\/li>\r\n<li><a href=\"https:\/\/lobo.mensa.uberspace.de\/wp\/?p=436\">Teil 3<\/a><\/li>\r\n<li><a href=\"https:\/\/lobo.mensa.uberspace.de\/wp\/?p=460\">Teil 4<\/a><\/li>\r\n<\/ul>\r\n<\/div>\n<p>Ich habe vor ein paar Tagen angefangen mich, nach sehr langer Zeit, mal wieder n\u00e4her mit Maschinen Lernen, genauer neuronalen Netzen zu besch\u00e4ftigen. Wenn man danach sucht stolpert man unweigerlich \u00fcber <a href=\"https:\/\/www.tensorflow.org\/\">TensorFlow<\/a>.<\/p>\n<p>Ein m\u00e4chtiges Werkzeug, es gibt auf der Website gleich mehrere <a href=\"https:\/\/www.tensorflow.org\/tutorials\">Tutorials<\/a> und auch eine mehr oder minder gute Dokumentation aller vorhandenen Funktionen.<\/p>\n<p>Man findet auch im Internet jede Menge Dokumentationen in allen m\u00f6glichen Formaten, was denn neuronale Netze sind. (Empfohlen sei an dieser Stelle <a href=\"http:\/\/www.dkriesel.com\/science\/neural_networks\"><em>Ein kleiner \u00dcberblick \u00fcber Neuronale Netze<\/em><\/a>).<\/p>\n<p>Mir hat es jedoch den Einstieg jedoch unheimlich erschwert, da\u00df ich nichts zu den Begrifflichkeiten und Funktionsweisen von Tensorflow auf Anhieb gefunden habe.<br \/>\n<!--more--><\/p>\n<p>Aber von Anfang an:<\/p>\n<p>Ein neuronales Netz kann man sich zuerst einmal als schwarze Kiste vorstellen. Auf der einen Seite kommen die Eingabedaten rein, auf der anderen kommen Ergebnisse raus. Wenn man ein Netz neu aufbaut stimmen die Ergebnisse jedoch mit Sicherheit nicht mit den gew\u00fcnschten Werten \u00fcberein. Das Netz mu\u00df erst lernen, es mu\u00df trainiert werden mit Paaren aus Eingabedaten und dazu bekannten bzw. gew\u00fcnschten Ergebnissen.<\/p>\n<p>In Tensorflow hei\u00dfen die Eingabedaten <em>Features<\/em> und die erwarteten Ergebnisse <em>Labels<\/em>.<\/p>\n<p>Da man jedoch zum Teil mit sehr gro\u00dfen Datenmengen hantiert, die nicht vollst\u00e4ndig in den Speicher passen, erstellt man bei Tensorflow nicht einfach ein neuronales Netz mit festen Werten und f\u00fcttert es mit den Trainingsdaten, sondern man beschreibt, auf welche Art und Weise die Daten mit einander verkn\u00fcpft werden und woher sie kommen.<\/p>\n<p>Ein solcher Stellvertreter-Datensatz wird <a href=\"https:\/\/www.tensorflow.org\/api_docs\/python\/tf\/Tensor\"><em>Tensor<\/em><\/a> genannt. Er hat eine Dimension (<em>shape<\/em>) und einen Datentyp (<em>dtype<\/em>), konkrete Werte nimmt er jedoch erst sp\u00e4ter im Programmlauf an.<\/p>\n<p>Damit w\u00e4ren schon mal einige wichtige Begriffe genannt.<\/p>\n<p>Die n\u00e4chste Schwierigkeit, die ich hatte, war, da\u00df es viele unterschiedliche M\u00f6glichkeiten der Erstellung eines neuronalen Netzes und der Art und Weise wie man die Daten von der Quelle l\u00e4dt und dem Netz f\u00fcttert, gibt.<\/p>\n<p>Zuerst einmal ben\u00f6tigt man einen <code class=\"codecolorer python blackboard\"><span class=\"python\">tf.<span class=\"me1\">estimator<\/span>.<span class=\"me1\">Estimator<\/span><\/span><\/code>. Diesen kann man, wie im <a href=\"https:\/\/www.tensorflow.org\/tutorials\/layers\">MNIST-Tutorial<\/a>, selber zusammenbauen (<a href=\"https:\/\/www.tensorflow.org\/tutorials\/layers#create_the_estimator\">Erstellung des Estimators<\/a> mithilfe <a href=\"https:\/\/www.tensorflow.org\/tutorials\/layers#building_the_cnn_mnist_classifier\">einer Funktion<\/a> welche die Struktur des Netzes aufbaut) oder man benutzt einen vordefinierten Modell-Typ wie in <a href=\"https:\/\/www.tensorflow.org\/get_started\/get_started_for_beginners#describe_the_data\">Premade Estimators for ML Beginners<\/a>, in dem ein <code class=\"codecolorer python blackboard\"><span class=\"python\">tf.<span class=\"me1\">estimator<\/span>.<span class=\"me1\">DNNClassifier<\/span><\/span><\/code> f\u00fcr die Klassifikation von drei Arten der Gattung Schwertlilie (Iris) anhand der Geometrie der Bl\u00fcten benutzt wird.<\/p>\n<p>Und da ich jetzt gerade merke, da\u00df es zu lange dauern wird, alles, was ich schreiben m\u00f6chte, in diesen einen Artikel zu packen, ver\u00f6ffentliche ich diesen Teil jetzt und mache eine kleine Reihe daraus.<\/p>\n<p><a href=\"https:\/\/lobo.mensa.uberspace.de\/wp\/?p=386\">Zum zweiten Teil<\/a><\/p>\n<div class=\"LinkListe\">\r\n<p>Links zu weiterf\u00fchrenden Informationen dieser Artikelserie:<\/p>\r\n<ul>\r\n<li><a href=\"https:\/\/gitlab.com\/Azador\/dice\">Dice - die Quellen dieses Projekts auf GitLab<\/a><\/li>\r\n<li><a href=\"https:\/\/www.tensorflow.org\/\">TensorFlow<\/a><\/li>\r\n<li><a href=\"http:\/\/www.dkriesel.com\/science\/neural_networks\">D. Kriesel \u00fcber Neuronale Netzwerke<\/a><\/li>\r\n<li><a href=\"http:\/\/doc.qt.io\/qt-5\/\">Qt5 API<\/a><\/li>\r\n<\/ul>\r\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Ich habe vor ein paar Tagen angefangen mich, nach sehr langer Zeit, mal wieder n\u00e4her mit Maschinen Lernen, genauer neuronalen Netzen zu besch\u00e4ftigen. Wenn man danach sucht stolpert man unweigerlich \u00fcber TensorFlow. Ein m\u00e4chtiges Werkzeug, es gibt auf der Website gleich mehrere Tutorials und auch eine mehr oder minder gute Dokumentation aller vorhandenen Funktionen. Man &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/lobo.uber.space\/wp\/?p=341\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eStr\u00f6mende Tensoren\u201c<\/span> weiterlesen<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[59,9,58],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=\/wp\/v2\/posts\/341"}],"collection":[{"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=341"}],"version-history":[{"count":16,"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=\/wp\/v2\/posts\/341\/revisions"}],"predecessor-version":[{"id":458,"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=\/wp\/v2\/posts\/341\/revisions\/458"}],"wp:attachment":[{"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=341"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=341"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lobo.uber.space\/wp\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=341"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}