Objektorientiertes Kind !? Ich habe Deep Learning mit Java ausprobiert (Testversion)

FUJITSU Adventskalender 2019 Dies ist der Artikel am 23. Tag. Ist Java nicht die objektorientierteste untergeordnete Sprache? In der Vergangenheit schienen C ++ und Smalltalk an erster Stelle zu stehen, aber C ++, das unter Berücksichtigung der C-Kompatibilität entwickelt wurde, erzwingt keine objektorientierte Implementierung. Wenn es um Smalltalk ging, wusste ich keineswegs, dass es ihn gibt. .. .. : heat_smile: Ich erinnere mich, dass ich Java als repräsentative Sprache von "Entwicklungskonzept = objektorientiert, was es relativ einfach macht, Programme zu implementieren, die Wiederverwendbarkeit berücksichtigen" in einem früheren Buch gelesen habe, aber das ist nicht falsch. Ich denke. Wie Sie aus Übergang gängiger Programmiersprachen, 1965-2019 (Python-Perspektive) sehen können, auch in der Softwareentwicklung Es ist eine weit verbreitete Sprache. Übrigens hat es immer noch einen überwältigenden Anteil an der internen Softwareentwicklung! ?? Scheint zu halten. (Es gibt keine statistischen Daten nach populärer Theorie: Sweat_smile :) Ist es jedoch nicht eine echte objektorientierte Sprache wie Python in den letzten Jahren? Mit dem Aufkommen der Sprachen kann die Machtkarte in Zukunft neu geschrieben werden. .. .. : Schrei:

Was du machen willst

Die Einführung ist sehr lang geworden, aber in diesem Artikel geht es darum, Deep Learning in Java auszuprobieren.

Warum Java?

Ein Freund, der mehr als dreimal wettbewerbsfähiges Programmieren mag, sagte, dass er früher in Java programmiert habe, aber kürzlich zu Rust gewechselt sei. Er wollte jede populäre Sprache ausprobieren. Wie Sie aus dem obigen Übergang beliebter Programmiersprachen ersehen können, scheint Java von anderen Sprachen vorangetrieben zu werden. .. .. Einige Leute drücken es als alte Sprache aus, deshalb wird es schrecklich behandelt. .. .. Um zu beweisen, dass das objektorientierte Kind immer noch im aktiven Dienst kämpfen kann, dachte ich, ich müsste genug tun, um das heutzutage beliebte tiefe Lernen durchzuziehen. Diesmal handelt es sich jedoch um eine Testversion, wie der Titel schon sagt. : dancer_tone :: dancer :: dancer_tone2 :: dancer_tone3 :: dancer_tone4 :: dancer_tone5:

samurai-duke.png The Last Java Samurai[1]

: yum: Übrigens, ich komme aus einem Nicht-Informationssystem, daher war ich als Student frustriert, Java zu lernen, und nachdem ich in das Unternehmen eingetreten war, lernte ich zum ersten Mal die Güte von Java.

Java ∩ Deep Learning ∩ OSS existiert tatsächlich

Python hat einen überwältigenden Anteil an der Welt des maschinellen Lernens, einschließlich Deep Learning, und die meisten OSS-Opportunity-Learning-Bibliotheken sind ebenfalls in Python implementiert. Es ist jedoch seit einiger Zeit möglich, mithilfe des Deep Learning-Modells in Java zu lernen und daraus zu schließen. Es gab OSS [^ 4j]. Dieses Mal werde ich jedoch versuchen, das OSS "Deep Java Library (im Folgenden: DJL) [^ djl]" zu verwenden, das am 3. Dezember 2019 neu veröffentlicht wurde.

Deep Learning mit Deep Java Library (DJL)

Der Artikel ist lang geworden, aber es ist das Hauptthema. Derzeit können Sie sich nur auf Offizielle Website und Referenzartikel verlassen. : schreien ::: Geist:

djl.png

Umgebung

In Referenzartikel wurde die Umgebung mit der Methode unter Verwendung von Gradle auf AWS erstellt. Dieses Mal möchte ich die Methode zur Ausführung des Containers mit Docker + Jupyter Notebook in der lokalen Umgebung übernehmen. Jupyter Notebook hat das Image eines Visualisierungstools für Python, wurde jedoch in letzter Zeit immer praktischer, da es mehrere Sprachen unterstützt.

Ausführungsumgebung

macOS Mojave 10.14.6(CPU:Corei5-8210Y 1.6GHz, DRAM:16GB)[^nogpu] Docker 19.03.5

Quellklon

Klonen Sie das Repository von GitHub.

git clone https://github.com/awslabs/djl.git

Wechseln Sie in das Verzeichnis "jupyter" unter dem Verzeichnis "djl"

cd djl/jupyter/

Container starten

docker container run -itd -p 127.0.0.1:8888:8888 -v $PWD:/home/jupyter deepjavalibrary/jupyter

Sie können die Docker-Datei bearbeiten, um das Image zu erstellen. Diesmal wurde jedoch mit den Standardeinstellungen begonnen.

Bestätigung des Container-Starts

$ docker container ls
CONTAINER ID        IMAGE                     COMMAND                  CREATED             STATUS              PORTS                      NAMES
03791a7b1641        deepjavalibrary/jupyter   "jupyter notebook --…"   4 minutes ago       Up 4 minutes        127.0.0.1:8888->8888/tcp   suspicious_brattain

Starten Sie Jupyter

Wenn Sie auf "http: // localhost: 8888" zugreifen und die folgende Seite angezeigt wird, ist dies erfolgreich.

jupyter.png

Wenn Sie genau hinschauen, werden die Tutorials bereits als jedes Notizbuch gespeichert. Ich gab der Bequemlichkeit von Jupyter Notebook nach und prahlte damit, dass ich es in Java tun würde. .. .. : Schluchzen:

Ausführen von Multi Layer Perceptron (MLP)

Starten Sie train_your_first_model.ipynb. Dies ist ein Beispiel für die handschriftliche Zeichenerkennung (MNIST) mit MLP. Um das Training auszuführen, drücken Sie einfach Shit + Enter, um die Befehle in der Zelle der Reihe nach auszuführen. Das ist sehr einfach. Ich war zuerst überrascht, dass ich die Hauptfunktion oder Klasse nicht schreiben musste.

mlp.png

Die folgende Meldung wurde beim Speichern des Modells ausgegeben. Die korrekte Antwortrate beträgt ungefähr 97%, dies ist jedoch nur ein numerischer Wert, der auf den Bewertungsdaten zum Zeitpunkt des Lernens basiert, und die korrekte Antwortrate basierend auf den Testdaten wird dieses Mal nicht gemessen. .. .. .. : stick_out_tongue_closed_eyes:

Model (
	Name: mlp
	Model location: /home/jupyter/build/mlp
	Data Type: float32
	Accuracy: 0.96991664
	Epoch: 2
)

Inferenz mit Model Zoo durchführen (Deep Learning)

Dieses Mal werde ich ein Beispiel für die Objekterkennung ausführen. Starten Sie object_detection_with_model_zoo.ipynb. Ich habe Model Zoo im obigen Referenzartikel ausprobiert, also dachte ich, ich würde ein anderes Beispiel ausprobieren, aber ich kann die detaillierte Verwendung der Bibliothek immer noch verstehen. Dieses Mal ist das trainierte Modell ([SSD: Single Shot MultiBox Detector](https: // qiita)) nicht verfügbar, da die Yahari-GPU-Umgebung für das Lernen unverzichtbar ist (das Erlernen von MLP auf der CPU dauert einige Zeit ...). Ich habe versucht, Objekte (Inferenz) von .com / YutoHagiwara / items / 4b66442ff1e09936f1d0)) zu erkennen.

modelzoo.png

Versuchen Sie die Objekterkennung mit dem Bild unten. Dies ist ein Bild von einem Hund, einem Fahrrad und einem Auto.

dog_byke_car.png

Inferenzergebnis

Das Ausführungsergebnis ist unten dargestellt. Sie können Objekte (Hunde, Fahrräder, Autos) richtig erkennen.

detection_results.png

Das Inferenzergebnis (numerischer Wert) ist unten gezeigt. Sie können sehen, dass jedes Objekt mit hoher Genauigkeit erkannt wird.

[
	class: "car", probability: 0.99991, bounds: [x=0.612, y=0.137, width=0.293, height=0.160]
	class: "bicycle", probability: 0.95365, bounds: [x=0.162, y=0.207, width=0.594, height=0.590]
	class: "dog", probability: 0.93471, bounds: [x=0.168, y=0.350, width=0.274, height=0.594]
]

Zusammenfassung und zukünftige Ausgaben

Ich habe JDL ausprobiert, das Deep Learning in Java ausführen kann. Es scheint, dass es unter AWS ausgeführt werden soll, aber es funktionierte auch mit Docker in der lokalen Umgebung ohne Probleme. Diesmal war es eine Testausgabe, aber ich möchte mit der Untersuchung fortfahren und in Zukunft etwas Fortgeschritteneres ausprobieren. Schließlich werden die zukünftigen Probleme unten beschrieben.

Dies ist die Testversion von Deep Learning mit einem objektorientierten Schüler. Ich werde mein Bestes tun, um im nächsten Jahr weitere Artikel zu veröffentlichen.

[^ 4j]: Deeplearning4j. Als japanisches Buch "[Deep Learning Java-Programmiertheorie und Implementierung von Deep Learning (von Yusuke Negago; Impress; 2016)](https://www.amazon.co.jp/Deep-Learning-Java85-impress/ dp / 4844381288) ”wurde veröffentlicht. [^ djl]: Es scheint, dass es für die Verwendung unter AWS entwickelt wurde. ([Referenzinformationen](https://aws.amazon.com/jp/about-aws/whats-new/2019/12/introducing-deep-java-library-develop-and-deploy-machine-learning-models- in-java /)))

[^ nogpu]: Da unser Ziel diesmal darin besteht, DJL zu testen, werden wir es auf der CPU ausführen, nicht in der Umgebung, in der GPU + CUDA ausgeführt wird. Daher beschränkt sich diese Überprüfung auf das Testen des Multi-Layer-Perceptron-Trainings und der Inferenz unter Verwendung des trainierten Modells des Deep Learning. Ich werde die Operation auf der GPU zu einem späteren Zeitpunkt versuchen.


  1. https://blog.heroku.com/samurai-duke-and-the-legend-of-openjdk ↩︎

Recommended Posts

Objektorientiertes Kind !? Ich habe Deep Learning mit Java ausprobiert (Testversion)
Ich habe versucht, Metaprogrammierung mit Java
Ich habe versucht, JWT in Java zu verwenden
Ich habe versucht, das Java-Lernen zusammenzufassen (1)
Lernen Sie Deep Learning von Grund auf in Java.
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Erste Schritte für tiefes Lernen in Java
Ich habe das neue Yuan-Problem in Java ausprobiert
Ich habe versucht, neunundneunzig in Java auszugeben
[Deep Learning von Grund auf neu] in Java 3. Neuronales Netzwerk
Ich habe versucht, Alexa-Fähigkeiten mit Java zu erstellen
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ POJO Edition ~ ausprobiert
Versuchte Mastodons Toot- und Streaming-API in Java
Ich habe versucht, die Firebase-Push-Benachrichtigung in Java zu implementieren
# 2 [Anmerkung] Ich habe versucht, neunundneunzig mit Java zu berechnen.
Ich habe versucht, eine Clova-Fähigkeit in Java zu erstellen
Ich habe versucht, eine Anmeldefunktion mit Java zu erstellen
Ich habe versucht, die erweiterte for-Anweisung in Java zu verwenden
Ich habe versucht, Java Silver in 2 Wochen zu bestehen, ohne Java zu kennen
Ich habe versucht, die Methode der gegenseitigen Teilung von Eugrid in Java zu implementieren
~ Ich habe jetzt versucht, funktionale Programmierung mit Java zu lernen ~
Ich habe versucht herauszufinden, was sich in Java 9 geändert hat
Ich habe versucht, Effective Java 3rd Edition "fast alle Kapitel" in "leicht lesbarem Japanisch" zu erklären.
Ich habe ein Roulette in Java gemacht.
Ich habe Drools (Java, InputStream) ausprobiert.
Ich habe versucht, in Java von einer Zeichenfolge in einen LocalDate-Typ zu konvertieren
Ich habe versucht, Java REPL zu verwenden
Ich habe versucht, Dapr in Java zu verwenden, um die Entwicklung von Mikroservices zu erleichtern
Ich habe einen RESAS-API-Client in Java erstellt
Deep Copy Collection in Java
Ich habe versucht, Java-Anfänger so einzustellen, dass sie Tastenkombinationen in Eclipse verwenden
Ich habe den Eingabe- / Ausgabetyp von Java Lambda ~ Map Edition ~ ausprobiert
Ich habe eine E-Mail in Java gesendet
Deep Learning Java von Grund auf 6.4 Regularisierung
Ich habe versucht, mit Java zu interagieren
Ich habe versucht, UDP mit Java zu kommunizieren
Ich habe Gordobachs Theorem in Java geschrieben
Ich habe versucht, Domino11 in CentOS7 zu integrieren
Ich habe das Java-Framework "Quarkus" ausprobiert.
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe eine Anmerkung in Java gemacht.
Was ich über Java-Lernen recherchiert habe
Ich habe jetzt versucht, Java 8 zusammenzufassen
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, Java mit einer Reihe zu lernen, die Anfänger klar verstehen können
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben (PowerMockito Edition)
Ich habe versucht, mit AI "A3RT" eine Talk-App in Java zu erstellen.
Ich habe ein Kalenderproblem mit Ruby versucht
Ich habe Cassandras Object Mapper für Java ausprobiert
Ich habe versucht, Java-Lambda-Ausdrücke zusammenzufassen
Java9 war enthalten, also habe ich jshell ausprobiert.
Ich habe das maschinelle Lernen von Oracle OSS "Tribuo" ausprobiert.
Ich habe mit Studyplus zeitsparendes Management-Lernen versucht.
Deep Learning Java von Grund auf neu Kapitel 1 Einführung
Deep Learning Java von Grund auf 6.1 Parameteraktualisierung
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
Ich habe die OpenCV-Kamerakalibrierung in Java durchgeführt