<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Recent changes to Documentation</title><link>https://forge.codesys.com/lib/ml-iec-lib/wiki/Documentation/</link><description>Recent changes to Documentation</description><language>en</language><lastBuildDate>Wed, 15 Sep 2021 09:30:09 -0000</lastBuildDate><atom:link href="https://forge.codesys.com/lib/ml-iec-lib/wiki/Documentation/feed" rel="self" type="application/rss+xml"></atom:link><item><title>Documentation modified by profgriesbauer</title><link>https://forge.codesys.com/lib/ml-iec-lib/wiki/Documentation/</link><description>&lt;div class="markdown_content"&gt;&lt;p&gt;&lt;strong&gt;Machine-Learning Bibliothek&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Was? Machine Learning stellt für viele Maschinenbauer ein interessantes Thema dar, dass aber auf Grund fehlender Infrastrukturen und zusätzlich nötiger Hardware oftmals nur schwer anzugehen ist. Diese Bibliothek zielt darauf ab, die grundlegenden Software-Bausteine die zum Machine Learning in künstlichen neuronalen Netzen (wie sie Google, etc. nutzen) nötig sind direkt in IEC anzubieten. Damit kann mit den Methoden des Machine Learning auf beliebigen Steuerungen experimentiert werden ohne zusätzlichen Einsatz von Infrastruktur oder Hardware.&lt;br/&gt;
Wer? Unabhängig davon, dass die vorliegende Bibliothek sehr einfach in IEC auf jeder Steuerung eingebunden werden kann, setzt sie dennoch einfache Grundlagen und Verständnis zum Machine Learning voraus. Eine Buchempfehlung die diese Grundlagen sehr schnell und effizient darstellt ist „Neuronale Netze selbst Programmieren“ von Tariq Rashid.&lt;br/&gt;
Wie? Zur einfacheren effizienteren Nutzung sind einige typische FB-Bausteine, die Anwendungen wiederspiegeln vorbereitet. Zudem sind ein einfacheres und ein komplexeres Beispiel der Anwendung der Bibliothek umgesetzt und mitgeliefert. &lt;br/&gt;
Wieso? Die gesamte Bibliothek ist Open-Source und darf und kann entsprechend erweitert, verbessert oder verändert werden. Gleichermaßen besteht kein Anspruch auf bestimmte Funktionalitäten oder Fehlerfreiheit.&lt;br/&gt;
Wichtig: Die Bibliothek nutzt „Dynamic Memory“. Diese Option muss unter den Eigenschaften der Applikation aktiviert, bzw. mit Speicher versehen werden:&lt;/p&gt;
&lt;p&gt;Beispiele:&lt;br/&gt;
•   MLNeuronalNetworkExample.project: Die Idee ist es beliebige 16 Eingänge mit einem Ampelsystem (rot, gelb, grün) zu verknüpfen. Entsprechend wird der FB VariableNeuronalNetwork16To3 eingesetzt. Auf Knopfdruck werden Trainingsdaten generiert und das Netzwerk trainiert, das dann im Anschluss mit einer bestimmten Eingangskonfiguration angefragt werden kann.&lt;br/&gt;
•   MLNeuronalNetworkComplexExample.project: Die Idee ist es Vibrationsdaten (als Amplitude-Zeit-Daten der Länge 2048) in einer Anomalieerkennung zu erlernen. Dazu wird der FB AnomalieDetection2048 eingesetzt, der so konfiguriert ist, dass er die Daten zunächst fourier transformiert. Jeden Zyklus werden Trainingsdaten des simulierten Gut-Zustandes erzeugt, mit denen das Netzwerk trainiert wird. Alle 10 Durchläufe werden Daten eines simulierten Schlecht-Zustandes erzeugt. Jeweils wird der Anomaliefaktor zum Vergleich, zusammen mit einer grafischen Ausgabe der erzeugten Spektren angezeigt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;1 – Anomalieerkennung&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;
Idee (Unsupervised Learning):Oftmals liefert eine Maschine Daten, die ihren Zustand charakterisieren. Im besten Falle sind das in den aller meisten Fällen Daten, die den „guten Zustand“ der Maschine kennzeichnen. Die Anomalieerkennung zielt darauf ab den guten Zustand sehr gut kennenzulernen, um dann, falls ein schlechter/abweichender Zustand eintritt, diesen durch einen gestiegenen Anomaliefaktor kennzeichnen zu können.&lt;br/&gt;
Die dafür vorbereiteten Funktionsbausteine besitzen den Namen „AnomalieDetection&lt;span&gt;[…]&lt;/span&gt;“ wobei &lt;span&gt;[…]&lt;/span&gt; durch 64, 1024, etc. ersetzt wird. Die Nomenklatur impliziert durch die Zahl, wie groß das Eingangsdaten-Array ist, d.h. wieviel Einträge das Array besitzen muss mit dem Trainiert oder Angefragt wird. Bei der Anfrage liefern die FBs jeweils einen REAL-Wert als Anomalie-Faktor, der je größer eine umso „größere Anomalie“ kennzeichnet.&lt;br/&gt;
Methoden:&lt;br/&gt;
Initialize&lt;br/&gt;
       Initialisierung eines Neuronalen Netzwerks zur Anomalieerkennung&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang learningrate    REAL    Lernrate des Netzwerks &lt;br/&gt;
(default = 0.4, Empfehlung: 0.3…0.5)&lt;br/&gt;
Eingang doFFT   BOOL    TRUE: Eingangswerte werden Fourier-Transformiert&lt;br/&gt;
Eingang doNormalize BOOL    TRUE: Eingangswerte werden normalisiert&lt;br/&gt;
Eingang doShuffleShift  BOOL    TRUE: Die Eingangswerte werden zyklisch, zufällig für das Training verschoben.&lt;/p&gt;
&lt;p&gt;Train&lt;br/&gt;
       Trainieren des Neuronalen Netzwerks&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang trainData   ARRAY &lt;span&gt;[1..uiSize]&lt;/span&gt; OF REAL &lt;br/&gt;
       Anmerkung: uiSize = Anzahl der Datenpunkte (z.B. bei AnomalieDetection2048 → uiSize = 2048)&lt;/p&gt;
&lt;p&gt;Query&lt;br/&gt;
       Abfrage des Neuronalen Netzwerks zur Erkennung von Anomalie&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang queryData   ARRAY &lt;span&gt;[1..uiSize]&lt;/span&gt; OF REAL &lt;br/&gt;
       Anmerkung: uiSize = Anzahl der Datenpunkte (z.B. bei AnomalieDetection2048 → uiSize = 2048)&lt;/p&gt;
&lt;p&gt;File_Save_Weights&lt;br/&gt;
       Speichern der Konfiguration eines Neuronalen Netzwerks zu einem bestimmten Zeitpunkt&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang Filename    STRING(255) Dateinamen der aktuellen Konfiguration &lt;/p&gt;
&lt;p&gt;File_Load_Weights&lt;br/&gt;
       Laden einer zuvor abgespeicherten Netzwerk-Konfiguration&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang Filename    STRING(255) Dateinamen der zu ladenden Konfiguration &lt;/p&gt;
&lt;p&gt;File_GetFileList&lt;br/&gt;
       Rückgabe einer Liste mit allen gespeicherten Konfigurations-Dateien&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang List    POINTER TO STRING(255)  STRING-Array, in das die Dateiliste geschrieben wird &lt;/p&gt;
&lt;p&gt;File_Delete_Weights&lt;br/&gt;
       Löschen einer bestimmten Konfigurations-Datei&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang Filename    STRING(255) Dateinamen der zu löschenden Konfiguration &lt;/p&gt;
&lt;p&gt;File_Delete_WeightsALL&lt;br/&gt;
       Löschen aller Konfigurationsdateien&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang Filename    STRING(255) Dateinamen der zu ladenden Konfiguration &lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;2 – Variables Neuronales Netzwerk&lt;/em&gt;&lt;/strong&gt;&lt;br/&gt;
Idee (Supervised Learning): In vielen Situationen erkennt man an Hand der Konstellation von Sensorwerten z.B. ob ein Bauteil gut oder schlecht ist. Diese Klassifikation findet von Hand oder in groben Grenzen statt. Ein „klassisches Neuronales Netz“ kann dazu genutzt werden, Daten z.B. zu klassifizieren. In diesem Fall werden beliebige Eingangswerte bestimmten vorgegebenen Ausgangswerten zugeordnet und das Netzwerk damit trainiert. Ziel ist es für unbekannte Ausgangswerte eine Abschätzung für die Ausgangswerte zu erlernen.&lt;br/&gt;
Die dafür vorbereiteten Funktionsbausteine besitzen den Namen „VariableNeuronalNetwork&lt;span&gt;[…]&lt;/span&gt;“ wobei &lt;span&gt;[…]&lt;/span&gt; durch 1024To10, 16To3, etc. ersetzt wird. Die Nomenklatur impliziert durch die Zahlen, wie groß das Eingangsdaten-Array ist (z.B. 16) und auf ein wie langes Ausgangsdaten-Array (z.B. 3) abgebildet wird. Bei der Anfrage liefern die FBs jeweils ein Ausgangsdaten-Array zurück, das je nach Anwendungsfall interpretiert wird.&lt;br/&gt;
Methoden:&lt;br/&gt;
Initialize&lt;br/&gt;
       Initialisierung eines variablen Neuronalen Netzwerks&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang learningrate    REAL    Lernrate des Netzwerks &lt;br/&gt;
(default = 0.4, Empfehlung: 0.3…0.5)&lt;br/&gt;
Eingang hiddenLayers    POINTER TO UINT Adresse des Arrays mit der Knotenanzahl des jeweiligen Layers&lt;br/&gt;
Eingang hiddenTypes POINTER TO UINT Adresse des Arrays mit der Typkennzahl des jeweiligen Layers&lt;br/&gt;
Eingang hiddenLayersCount   UINT    Anzahl der Hidden Layer (ohne In- und Outlayer)&lt;/p&gt;
&lt;p&gt;Train&lt;br/&gt;
       Trainieren des variablen Neuronalen Netzwerks&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang InputTrain  POINTER TO REAL Adresse des Arrays mit den Train-Inputs&lt;br/&gt;
Eingang TargetsTrain    POINTER TO REAL Adresse des Arrays mit den Train-Targets&lt;/p&gt;
&lt;p&gt;Query&lt;br/&gt;
       Abfragen des variablen Neuronalen Netzwerks&lt;br/&gt;
Gültigkeitsbereich  Name    Typ Beschreibung&lt;br/&gt;
Eingang InputQuery  POINTER TO REAL Adresse des Arrays mit den Query-Inputs&lt;br/&gt;
Eingang OutputQuery POINTER TO REAL Adresse eines leeren Arrays mit den Query-Outputs&lt;/p&gt;
&lt;p&gt;Weitere Methoden zum Speichern und Laden von Netzwerkkonfigurationen:&lt;br/&gt;
-   File_Save_Weights&lt;br/&gt;
-   File_Load_Weights&lt;br/&gt;
-   File_Get_FileList&lt;br/&gt;
-   File_Delete_Weights&lt;br/&gt;
-   File_Delete_WeightsALL&lt;br/&gt;
Beschreibung dazu siehe oben bei „1-Anomalieerkennung“.&lt;/p&gt;&lt;/div&gt;</description><dc:creator xmlns:dc="http://purl.org/dc/elements/1.1/">profgriesbauer</dc:creator><pubDate>Wed, 15 Sep 2021 09:30:09 -0000</pubDate><guid isPermaLink="false">https://forge.codesys.com29330f7740aac7df6b3f8c205dd6ce4a95edc630</guid></item></channel></rss>