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:
L'introduction est devenue très longue, mais le but de cet article est d'essayer le Deep Learning en 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:
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.
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.
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:
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.
macOS Mojave 10.14.6(CPU:Corei5-8210Y 1.6GHz, DRAM:16GB)[^nogpu] Docker 19.03.5
Clonez le référentiel depuis GitHub.
git clone https://github.com/awslabs/djl.git
jupyter
sous le répertoire djl
cd djl/jupyter/
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.
$ 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
Si vous accédez à http: // localhost: 8888
et que la page suivante s'affiche, cela réussit.
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:
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.
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
)
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)).
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.
Le résultat de l'exécution est indiqué ci-dessous. Vous pouvez reconnaître correctement les objets (chiens, vélos, voitures).
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]
]
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.
https://blog.heroku.com/samurai-duke-and-the-legend-of-openjdk ↩︎
Recommended Posts