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
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.
(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.
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.
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.
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:
ConvolutionLayer
and Convolution1DLayer
(and Conv2D
/Conv2DDerivative
ND4J ops)SubsamplingLayer
and Subsampling1DLayer
(and MaxPooling2D
/AvgPooling2D
/Pooling2DDerivative
ND4J ops)BatchNormalization
layer (and BatchNorm
ND4J op)LocalResponseNormalization
layer (and LocalResponseNormalization
ND4J op)Convolution3D
layer (and Conv3D
/Conv3DDerivative
ND4J ops)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);
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. (Bildquelle: http://deeplearning.hatenablog.com/entry/transformer))
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.
(Bildquelle: https://twitter.com/_Ryobot/status/1050925881894400000)
Sie können BERT jetzt auch auf DL4J ausprobieren.
Einige interessante Funktionen wie die folgenden wurden heimlich hinzugefügt.
PythonTransorfm
Hinzufügen von /datavec-python/src/main/java/org/datavec/python/PythonTransform.java) (Verwenden Sie Python-Datenvorverarbeitungscode in Java)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