Enfant orienté objet!? J'ai essayé le Deep Learning avec Java (édition d'essai)

Calendrier de l'Avent FUJITSU 2019 Ceci est l'article du 23ème jour. Java n'est-il pas le langage enfant le plus orienté objet? Historiquement, C ++ et Smalltalk semblaient sortir les premiers, mais C ++, développé avec la compatibilité C à l'esprit, n'applique pas l'implémentation orientée objet. En ce qui concerne Smalltalk, je ne connaissais en aucun cas son existence. .. .. : sweat_smile: Je me souviens avoir lu Java comme le langage représentatif du "Concept de développement = orienté objet, ce qui rend relativement facile la mise en œuvre de programmes prenant en compte la réutilisabilité" dans un livre précédent, mais ce n'est pas faux. Je pense. Comme vous pouvez le voir dans Transition of popular programming languages, 1965-2019 (Python perspective), également en développement logiciel C'est une langue largement utilisée. À propos, il a toujours une part écrasante de développement de logiciels en interne! ?? Semble tenir. (Il n'y a pas de données statistiques par la théorie populaire: sweat_smile :) Cependant, ces dernières années, n'est-ce pas un véritable langage orienté objet comme Python? Avec l'essor des langues, la carte du pouvoir pourrait être réécrite à l'avenir. .. .. : crier:

Chose que tu veux faire

L'introduction est devenue très longue, mais le but de cet article est d'essayer le Deep Learning en Java.

Pourquoi Java?

Un ami qui aime la programmation compétitive plus de trois fois a déclaré qu'il avait l'habitude de programmer en Java, mais qu'il est récemment passé à Rust. Il voulait essayer n'importe quelle langue populaire. Comme vous pouvez le voir ci-dessus Transition des langages de programmation populaires, Java semble être poussé par d'autres langages. .. .. Certaines personnes l'expriment comme une vieille langue, donc elle est traitée terriblement. .. .. Afin de prouver que l'enfant orienté objet peut encore se battre en service actif, j'ai pensé que je devais en faire assez pour réussir l'apprentissage en profondeur qui est populaire ces jours-ci. Cependant, cette fois, il s'agit d'une édition d'essai comme le titre l'indique. : dancer_tone :: dancer :: dancer_tone2 :: dancer_tone3 :: dancer_tone4 :: dancer_tone5:

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

: yum: Au fait, je viens d'un système non informatif, donc j'étais frustré d'essayer d'étudier Java quand j'étais étudiant, et après avoir rejoint l'entreprise, j'ai appris les bienfaits de Java pour la première fois.

Java ∩ Deep Learning ∩ OSS existe réellement

Python détient une part écrasante dans le monde de l'apprentissage automatique, y compris le Deep Learning, et la plupart des bibliothèques d'apprentissage d'opportunités OSS sont également implémentées en Python, mais il est possible d'apprendre et de déduire à l'aide du modèle Deep Learning en Java depuis un certain temps. Il y avait OSS [^ 4j]. Cependant, cette fois, j'essaierai d'utiliser l'OSS "Deep Java Library (ci-après DJL) [^ djl]" qui a été récemment publié le 3 décembre 2019.

Deep Learning avec Deep Java Library (DJL)

L'article est devenu long, mais c'est le sujet principal. À l'heure actuelle, les seules informations sur lesquelles vous pouvez vous fier sont Site officiel et Articles de référence. : cri ::: fantôme:

djl.png

Environnement

Dans Article de référence, l'environnement a été créé sur AWS par la méthode utilisant Gradle. Cette fois, j'aimerais adopter la méthode d'exécution sur le conteneur à l'aide de Docker + Jupyter Notebook dans l'environnement local. Jupyter Notebook a l'image d'un outil de visualisation pour Python, mais récemment, il est devenu de plus en plus pratique car il prend en charge plusieurs langues.

Environnement d'exécution

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

Clone source

Clonez le référentiel depuis GitHub.

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

Déplacez-vous dans le répertoire jupyter sous le répertoire djl

cd djl/jupyter/

Démarrer le conteneur

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

Vous pouvez modifier le Dockerfile pour créer l'image, mais cette fois, il a commencé avec les valeurs par défaut.

Confirmation du démarrage du conteneur

$ 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

Lancez Jupyter

Si vous accédez à http: // localhost: 8888 et que la page suivante s'affiche, cela réussit.

jupyter.png

Si vous regardez attentivement, les didacticiels sont déjà stockés dans chaque bloc-notes. J'ai cédé à la commodité de Jupyter Notebook tout en me vantant de le faire en Java. .. .. : sanglot:

Exécution de Perceptron multicouche (MLP)

Démarrez train_your_first_model.ipynb. Ceci est un exemple de reconnaissance de caractères manuscrits (MNIST) utilisant MLP. Pour exécuter la formation, appuyez simplement sur Shit + Entrée pour exécuter les commandes sur la cellule dans l'ordre. C'est très simple à faire. J'ai été surpris au début de ne pas avoir besoin d'écrire la fonction ou la classe principale.

mlp.png

Le message suivant a été émis lors de l'enregistrement du modèle. Le taux de réponse correct est d'environ 97%, mais il ne s'agit que d'une valeur numérique basée sur les données d'évaluation au moment de l'apprentissage, et le taux de réponse correct basé sur les données de test n'est pas mesuré cette fois. .. .. .. : Ouvre la bouche et ferme les yeux:

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

Effectuer des inférences avec Model Zoo (Deep Learning)

Cette fois, je vais exécuter un échantillon de reconnaissance d'objets. ʻInitier object_detection_with_model_zoo.ipynb`. J'essayais Model Zoo dans [Article de référence] ci-dessus (https://qiita.com/omix222/items/b77d8f8102f56458d39d), alors j'ai pensé essayer un autre échantillon, mais je peux toujours comprendre l'utilisation détaillée de la bibliothèque. Cette fois, le modèle entraîné ([SSD: Single Shot MultiBox Detector](https: // qiita)) est requis car l'environnement GPU Yahari est indispensable pour l'apprentissage. J'ai essayé la reconnaissance d'objets (inférence) par .com / YutoHagiwara / items / 4b66442ff1e09936f1d0)).

modelzoo.png

Essayez la reconnaissance d'objets avec l'image ci-dessous. Ceci est une photo d'un chien, d'un vélo et d'une voiture.

dog_byke_car.png

Résultat d'inférence

Le résultat de l'exécution est indiqué ci-dessous. Vous pouvez reconnaître correctement les objets (chiens, vélos, voitures).

detection_results.png

Le résultat de l'inférence (valeur numérique) est indiqué ci-dessous. Vous pouvez voir que chaque objet est reconnu avec une grande précision.

[
	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]
]

Résumé et futurs numéros

J'ai essayé JDL qui peut exécuter le Deep Learning en Java. Il semble qu'il soit censé être exécuté sur AWS, mais cela a fonctionné sans problème même avec Docker sur l'environnement local. Cette fois, c'était une édition d'essai, mais j'aimerais poursuivre l'enquête et essayer quelque chose d'un peu plus avancé à l'avenir. Enfin, les futurs problèmes sont décrits ci-dessous.

Ceci est la version d'essai de l'exécution du Deep Learning avec un étudiant orienté objet. Je ferai de mon mieux pour continuer à publier des articles l'année prochaine.

[^ 4j]: Deeplearning4j. En tant que livre japonais, "[Deep Learning Java Programming Theory and Implementation of Deep Learning (by Yusuke Negago; Impress; 2016)](https://www.amazon.co.jp/Deep-Learning-Java85-impress/ dp / 4844381288) »a été publié. [^ djl]: Il semble qu'il ait été développé pour être utilisé sur AWS. ([Informations de référence](https://aws.amazon.com/jp/about-aws/whats-new/2019/12/introducing-deep-java-library-develop-and-deploy-machine-learning-models- en-java /)))

[^ nogpu]: Puisque notre objectif est d'essayer DJL cette fois, nous allons l'exécuter sur le CPU, pas dans l'environnement où GPU + CUDA fonctionne. Par conséquent, cette vérification se limite au test de la formation et de l'inférence Multi Layer Perceptron à l'aide du modèle entraîné de Deep Learning. J'essaierai l'opération sur GPU à une date ultérieure.


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

Recommended Posts

Enfant orienté objet!? J'ai essayé le Deep Learning avec Java (édition d'essai)
J'ai essayé la métaprogrammation avec Java
J'ai essayé d'utiliser JWT en Java
J'ai essayé de résumer l'apprentissage Java (1)
Étudiez le Deep Learning à partir de zéro en Java.
J'ai essayé d'utiliser l'API Elasticsearch en Java
Premiers pas pour l'apprentissage profond en Java
J'ai essayé le nouveau yuan à Java
J'ai essayé de sortir quatre-vingt-dix-neuf en Java
[Deep Learning from scratch] dans Java 3. Réseau neuronal
J'ai essayé de créer une compétence Alexa avec Java
J'ai essayé le type d'entrée / sortie de Java Lambda ~ édition POJO ~
Essayé l'API Toot et Streaming de Mastodon en Java
J'ai essayé d'implémenter la notification push Firebase en Java
# 2 [Note] J'ai essayé de calculer quatre-vingt-dix-neuf avec Java.
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé d'utiliser l'instruction Extended for en Java
J'ai essayé de passer Java Silver en 2 semaines sans connaître Java
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
~ J'ai essayé d'apprendre la programmation fonctionnelle avec Java maintenant ~
J'ai essayé de découvrir ce qui avait changé dans Java 9
J'ai essayé d'expliquer Effective Java 3rd Edition "presque tous les chapitres" en "japonais facile à lire".
J'ai fait une roulette à Java.
J'ai essayé Drools (Java, InputStream)
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé d'utiliser Java REPL
J'ai essayé d'utiliser Dapr en Java pour faciliter le développement de microservices
J'ai créé un client RESAS-API en Java
Collecte de copies approfondies en Java
J'ai essayé de configurer les débutants Java pour qu'ils utilisent des touches de raccourci dans eclipse
J'ai essayé le type d'entrée / sortie de Java Lambda ~ Map edition ~
J'ai envoyé un e-mail en Java
Deep Learning Java from scratch 6.4 Régularisation
J'ai essayé d'interagir avec Java
J'ai essayé la communication UDP avec Java
J'ai écrit le théorème de Gordobach en java
J'ai essayé de mettre Domino11 dans CentOS7
J'ai essayé le framework Java "Quarkus"
J'ai essayé d'utiliser l'API Java8 Stream
J'ai fait une annotation en Java.
Ce que j'ai recherché sur l'apprentissage Java
J'ai essayé de résumer Java 8 maintenant
J'ai essayé d'utiliser le mémo Java LocalDate
J'ai essayé d'utiliser Google HttpClient de Java
J'ai essayé d'apprendre Java avec une série que les débutants peuvent comprendre clairement
Même en Java, je veux afficher true avec un == 1 && a == 2 && a == 3 (édition PowerMockito)
J'ai essayé de créer une application de conversation en Java à l'aide de l'IA «A3RT»
J'ai essayé un problème de calendrier avec Ruby
J'ai essayé le mappeur d'objets de Cassandra pour Java
J'ai essayé de résumer les expressions Java lambda
Java9 était inclus, j'ai donc essayé jshell.
J'ai essayé le machine learning OSS d'Oracle "Tribuo"
J'ai essayé l'apprentissage de la gestion qui fait gagner du temps avec Studyplus.
Deep Learning Java à partir de zéro Chapitre 1 Introduction
Deep Learning Java from scratch 6.1 Mise à jour des paramètres
J'ai essayé d'utiliser OpenCV avec Java + Tomcat
J'ai fait l'étalonnage de la caméra OpenCV en Java