Flexibilität mit rekurrenten neuronalen Netzen
Die Wolfram Language bietet hochleistungsfähige rekurrente Schichten (Layer), die Eingaben unterschiedlicher Länge ohne Leistungseinbußen nahtlos und effizient verarbeiten. Darüber hinaus bieten Tools wie NetStateObject und NetFoldOperator einen einfachen Zugriff auf die wiederkehrende Auswertung und Definition von benutzerdefinierten, rekurrenten High-Level-Schichten.
Lassen Sie uns zunächst demonstrieren, wie man eine einfache rekurrente Schicht erstellt und verwendet. Definieren Sie einen rekurrenten Layer für unterschiedlich lange Sequenzen bestehend aus Vektoren der Länge 2.
Evaluieren Sie die Schicht mit einem Satz Zeichensequenzen unterschiedlicher Länge.
Definieren Sie ein Netz, das Sequenzen von Zeichen variabler Länge verarbeiten kann und für jede Sequenz eine Nummer erzeugt.
Evaluieren Sie den Layer mit einem Satz unterschiedlich langer Strings.
Rekurrente Layer oder Netze, die mit NetChain oder NetGraph definiert wurden, sind standardmäßig zustandslos. Ihr interner Ausgangszustand ist jeweils der Nullvektor und wird nach jeder Evaluierung zurückgesetzt, so dass wiederholte Auswertungen mit demselben Eingang zum selben Ergebnis führen.
Rekurrente Netz-Schichten können mit NetStateObject in zustandsbehaftete Objekte verwandelt werden. Ein NetStateObject behält seinen eigenen Zustand nach der Auswertung bei, so dass wiederholte Auswertungen desselben Eingangs in der Regel unterschiedliche Ergebnisse liefern. Dies ist eine Möglichkeit, den internen Zustand einer rekurrenten Schicht beizubehalten und beispielsweise effizient Text zu erzeugen.
Erzeugen wir nun eine benutzerdefinierte rekurrente Schicht aus einem bestehenden NetGraph mittels NetFoldOperator. Definieren Sie eine LSTM-Einheit.
Erzeugen Sie eine multiplikative LSTM.
Evaluieren Sie die Schicht mit einem Satz unterschiedlich langer Sequenzen bestehend aus Vektoren der Länge 64.