[JAVA] Zusammenfassung der neuen Funktionen, die in Deeplearning4J 1.0.0-beta4 hinzugefügt wurden

Einführung

Anfang dieses Monats (Mai 2019) wurde eine neue Version 1.0.0-beta4 von DL4J veröffentlicht. Ich möchte zusammenfassen, welche Funktionen hinzugefügt wurden.

Klicken Sie hier für englische Versionshinweise. https://deeplearning4j.org/release-notes#onezerozerobeta4

Was ist DL4J überhaupt?

DL4J Deeplearning4J ist ein Open-Source-Deep-Learning-Framework, das in JVM-Sprachen wie Java / Scala / Kotlin entwickelt werden kann. Die Entwicklung ist im Gange, geleitet von Skymind, einem Startup-Unternehmen mit Hauptsitz in San Francisco.

Apropos tiefes Lernen, es gibt ein Bild von Python. Aber,

Vor diesem Hintergrund nimmt Java tatsächlich einen gewissen Anteil in der Welt des Deep Learning ein. Obwohl es sich um die Daten von 2018 handelt, befindet sie sich in der Mitte, wenn Sie die Anzahl der Sterne (horizontale Achse in der Abbildung unten) auf GitHub jedes Frameworks betrachten.

image.png (Bildquelle: https://www.kdnuggets.com/2018/04/top-16-open-source-deep-learning-libraries.html)

Python-Frameworks wie TensorFlow, PyTorch und Chainer sind im Wesentlichen für Forschung und Entwicklung sowie für experimentelle Zwecke gedacht, und die spektakulären Forschungsergebnisse, die wir jeden Tag sehen, werden mithilfe dieser Frameworks entwickelt. Ich denke es gibt viele. Ich habe den Eindruck, dass DL4J versucht, sich durch Konzentration auf seine kommerzielle Position zu differenzieren (obwohl es natürlich kostenlos verwendet werden kann).

Sie können es auch verwenden, indem Sie Ein mit Keras erstelltes Modell in DL4J importieren. Darüber hinaus wird der Import von TensorFlow-Modellen und Modellen im ONNX / PMML-Format unterstützt.

Wichtige Änderungen in DL4J 1.0.0-beta4

Werfen wir einen Blick auf die Highlights der Funktionen, die in der neuen Version 1.0.0-beta4 von DL4J hinzugefügt wurden.

Wir werden uns die Details von jedem unten ansehen.

Unterstützung für mehrere Datentypen in ND4J

ND4J ist eine wissenschaftliche Berechnungsbibliothek für JVMs. Die Java-Version von Numpy in Python ist möglicherweise leicht vorstellbar. Es gibt auch Berichte, dass ND4J doppelt so schnell ist wie Numpy. Natürlich unterstützt es CUDA, und Sie können die GPU auch verwenden, um Berechnungen zu beschleunigen.

Übrigens war in früheren Versionen von ND4J der Typ der N-dimensionalen Matrix (Tensor) auf float / double beschränkt. Ab 1.0.0-beta4 unterstützt Tensol auch alle folgenden gängigen Datentypen:

Insbesondere mit der Unterstützung von FP16 und INT scheint es möglich zu sein, die Miniaturisierung und Beschleunigung des neuronalen Netzwerks zu erwarten.

Unterstützung für MKL-DNN

Die Unterstützung für MKL-DNN, eine DNN-Beschleunigungsbibliothek (Deep Neural Network) für Intel-Prozessoren, wurde ebenfalls hinzugefügt.

Sie können MKL-DNN verwenden, um die folgenden Ebenen zu beschleunigen:

Darüber hinaus wird die Unterstützung für andere Ebenen wie "LSTM" in einer späteren Version unterstützt. Sie können MKL-DNN auch global deaktivieren, indem Sie die folgende Zeile hinzufügen:

python


Nd4jCpu.Environment.getInstance().setUseMKLDNN(false);

Es ist auch möglich, nur bestimmte Anweisungen durch Setzen der Umgebungsvariablen "ND4J_MKL_FALLBACK" ungültig zu machen.

python


ND4J_MKL_FALLBACK=conv2d,conv2d_bp

In früheren Versionen von ND4J wurde die regelmäßige Speicherbereinigung für die automatische Speicherfreigabe verwendet. (Für die Speicherbereinigung war Qiitas "Organisieren Sie den Mechanismus von Java GC" leicht zu verstehen.) [ND4J](https: / /github.com/deeplearning4j/nd4j) führte das Konzept von workspace als zusätzliches Speicherverwaltungsmodell ab 1.0.0-alpha ein. War dort. Der Speicher im Arbeitsbereich kann ohne Eingreifen eines Garbage Collectors wiederverwendet werden. Während des Trainings eines neuronalen Netzwerks mit DL4J sollte grundsätzlich kein Speicher zum Freigeben vorhanden sein. Infolgedessen erhöhte die regelmäßige Speicherbereinigung alle paar Sekunden den Leistungsaufwand.

Ab 1.0.0-beta4 ist die regelmäßige Speicherbereinigung standardmäßig deaktiviert. (Sie können es auch wie folgt aktivieren.)

python


Nd4j.getMemoryManager().togglePeriodicGc(true);
Nd4j.getMemoryManager().setAutoGcWindow(5000);

DL4J: Hinzufügen der Aufmerksamkeitsebene

Der Aufmerksamkeitsmechanismus, der 2017 von Google als Aufmerksamkeit ist alles, was Sie brauchen angekündigt wurde, ist in der Google-Übersetzung (Transformer) explosionsartig populär geworden. Es kann jetzt nativ mit DL4J verwendet werden.

Ryobots Blog ist für die Erklärung der Aufmerksamkeit leicht zu verstehen. image.png (Bildquelle: http://deeplearning.hatenablog.com/entry/transformer))

DL4J: BERT-Unterstützung

BERT ist eine neue Methode zum Vorlernen sprachlicher Ausdrücke. Es hat viel Aufmerksamkeit für seine SOTA-Ergebnisse (State-of-the-Art) erhalten, die zu einer Vielzahl von Aufgaben der Verarbeitung natürlicher Sprache führen.

image.png (Bildquelle: https://twitter.com/_Ryobot/status/1050925881894400000)

Sie können BERT jetzt auch auf DL4J ausprobieren.

Schließlich

Einige interessante Funktionen wie die folgenden wurden heimlich hinzugefügt.

Es gibt viele andere Funktionserweiterungen und Fehlerbehebungen. Informationen zu Inhalten, die in diesem Artikel nicht behandelt werden konnten, finden Sie in den offiziellen Versionshinweisen.

Probieren Sie DL4J 1.0.0-beta4 aus, das viele neue Funktionen bietet, um die neue Technologie, die auf diese Weise zum Standard geworden ist, nativ zu unterstützen.

Recommended Posts

Zusammenfassung der neuen Funktionen, die in Deeplearning4J 1.0.0-beta4 hinzugefügt wurden
PrimeFaces 6.0.x Zusammenfassung der neuen Funktionen
Liste der in Java 9 hinzugefügten Mitglieder
Liste der in Java 9 hinzugefügten Typen
Zusammenfassung der Stammklassen in verschiedenen Sprachen
Zusammenfassung der Hashes und Symbole in Ruby
Zusammenfassung der Auswahl von Elementen in Selen
Zusammenfassung der einfachen Funktionen von Bootstrap für Anfänger
Zusammenfassung dessen, was ich in Spring Batch gelernt habe
Java1.8 neue Funktionen
Zusammenfassung der häufig verwendeten Befehle in Rails und Docker
Zusammenfassung der Revisionen (neue Yuan-Probleme) nach Java-Version
Persönliche Zusammenfassung der in JUnit 4 häufig verwendeten Typen
Zusammenfassung der Implementierung von Standardargumenten in Java