[PYTHON] J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]

Il semble que SONY l'ait fait

Sony accélère l'évolution de l'IA. Open source of deep learning core library

SONY a publié sa propre bibliothèque Deep Learning en open source. Site officiel Cliquez ici si vous êtes intéressé

Le Japon ne fait-il pas de son mieux, qui est ridiculisé comme un pays sous-développé dans certaines régions? En particulier, les grandes entreprises japonaises n'entendent pas de bonnes rumeurs sur des questions liées aux logiciels ...

A propos de SONY, un tel blog est récemment devenu un sujet brûlant ... Retraité de Sony Corporation

C'est une grande entreprise, donc je ne sais pas si tout est conforme à ce blog, Je suis sûr que je n'ai pas eu une bonne impression. Personnellement, je n'ai pas vraiment envie de la soutenir car c'est une entreprise japonaise. Puisque c'est un gros problème, écrivons une impression de l'utilisation de la bibliothèque sur Qiita!

Oui, tout le monde aime Cifar10

Cliquez ici pour le code

Pour le moment, je l'ai fait en le battant. Ouais. Ne vous inquiétez pas de la mauvaise qualité. ~~ Je voulais écrire un article sur l'utilisation de NNabla d'abord dans Qiita, c'est donc le résultat de l'avoir terminé à une vitesse super! !! !! ~~ Ne vous inquiétez pas de la précision car vous n'avez pas le temps et le modèle est super adapté. .. Je voulais juste toucher l'API. ..

main.py


def convolution(x):
  x = x.reshape([BATCH_SIZE, IMAGE_DEPTH, IMAGE_HEIGHT, IMAGE_WIDTH])
  with nn.parameter_scope("conv1"):
    output = PF.convolution(x, 16, (5, 5), stride=(2, 2), pad=(1, 1))
    output = F.relu(output)
  
  with nn.parameter_scope("conv2"):
    output = PF.convolution(output, 32, (3, 3), stride=(1, 1), pad=(1, 1))
    output = F.relu(output)
  
  with nn.parameter_scope("conv3"):
    output = PF.convolution(output, 64, (3, 3), stride=(1, 1), pad=(1, 1))
    output = F.relu(output)

  output = output.reshape([BATCH_SIZE, int(output.size / BATCH_SIZE)])

  with nn.parameter_scope("fc1"):
    output = PF.affine(output, 1024)
    output = F.relu(output)
  
  with nn.parameter_scope("fc2"):
    output = PF.affine(output, 256)
    output = F.relu(output)
  
  with nn.parameter_scope("softmax"):
    output = PF.affine(output, 10)
    output = F.softmax(output)
  
  return output

C'est un CNN comme ça. La référence API Fonctions paramétriques est une API abstraite qui facilite la définition du réseau. La couche inférieure est this. (Je ne l'ai pas regardé en détail ...)

Step: 00290 Train loss: 7.17657 Train accuracy: 0.34375
Step: 00300 Test loss: 7.22971 Test accuracy: 0.34990
Step: 00300 Train loss: 7.23585 Train accuracy: 0.28125
Step: 00310 Train loss: 7.26531 Train accuracy: 0.28125
Step: 00320 Train loss: 7.15616 Train accuracy: 0.37500
Step: 00330 Train loss: 7.19948 Train accuracy: 0.29688
Step: 00340 Train loss: 7.23404 Train accuracy: 0.26562
Step: 00350 Train loss: 7.13390 Train accuracy: 0.42188
Step: 00360 Train loss: 7.27805 Train accuracy: 0.20312
Step: 00370 Train loss: 7.08152 Train accuracy: 0.46875
Step: 00380 Train loss: 7.17094 Train accuracy: 0.34375
Step: 00390 Train loss: 7.12861 Train accuracy: 0.39062
Step: 00400 Test loss: 7.21064 Test accuracy: 0.36996

Le résultat de l'exécution est affiché sur la console comme ceci. Cela semble plus léger que d'écrire un réseau similaire dans TensorFlow.

Des difficultés

Je ne touche généralement que TensorFlow, et en fait je n'ai jamais utilisé de bibliothèques Deep Learning autres que TF. .. C'est gênant. J'ai utilisé des rayures pour approfondir ma compréhension.

Pour être honnête, je n'ai pas beaucoup de difficulté. Si vous avez utilisé d'autres bibliothèques, pouvez-vous les utiliser sans aucune gêne? C'est facile car vous pouvez définir des couches abstraites. Je ne peux rien dire car je n'ai pas utilisé d'autres bibliothèques, mais je pourrais utiliser ce type de code de la même manière.

En parlant des points difficiles, cela fait longtemps que j'utilise le système python2. J'ai complètement oublié la spécification de la division int.

main.py


def accuracy(p, t):
  pred_and_label = [(np.argmax(_p), np.argmax(_t)) for _p, _t in zip(p.d, t.d)]
  return float(len(filter(lambda x: x[0] == x[1], pred_and_label))) / float(len(p.d))

Je calcule ici le taux de réponse correct du résultat de sortie. Ce type est resté à 0 tout le temps, et j'ai pensé pendant un moment que c'était étrange. .. Ce problème a été corrigé pour float, il sera donc affiché correctement.

~~ Hmm. J'utilise principalement python3 pour les affaires, donc Je souhaite prendre en charge 3 systèmes dès que possible ici. ~~ Il semble qu'il supporte python3! Merci pour votre commentaire! (18/08/2017)

** Addenda **

Peut-être que j'ai eu du mal, ou peut-être que je n'ai pas pu le trouver parce que je n'avais pas le temps, Je n'ai rien trouvé qui correspond à None dans la définition de forme de TensorFlow. Celui qui définit une forme comme [?, 3, 64, 64]. En regardant le code sur Github de Sample, il semble que les données de test aient été calculées en répétant des lots de la même taille que l'entraînement, donc je l'ai fait aussi. Je ne suis pas honnête que la taille du lot ne puisse être fixée, donc je me demande s'il existe un moyen. .. Examinons ce domaine plus tard. ~~ Si vous avez le temps! !! ~~

Résumé

~~ Personnellement, utilisez TensorFlow ~~ Je veux que la zone Deep Learning soit excitée et je veux que vous fassiez de votre mieux. Si j'ai du temps libre, je pense que je devrais le toucher davantage et le tirer.

De plus, je suis un peu inquiet à propos de ce NN dynamique, donc je le toucherai à nouveau quand j'aurai le temps. Cela ressemble à un multi-paradigme de Define by run et Define and run.

S'il vous plaît laissez-moi savoir s'il y a quelque chose qui ne va pas! !!

Recommended Posts

J'ai essayé d'implémenter Cifar10 avec la bibliothèque SONY Deep Learning NNabla [Nippon Hurray]
J'ai essayé de mettre en œuvre un apprentissage en profondeur qui n'est pas profond avec uniquement NumPy
[Python] Deep Learning: J'ai essayé d'implémenter Deep Learning (DBN, SDA) sans utiliser de bibliothèque.
J'ai essayé d'implémenter Deep VQE
J'ai essayé d'implémenter ListNet d'apprentissage de rang avec Chainer
J'ai essayé d'implémenter Perceptron Part 1 [Deep Learning from scratch]
J'ai essayé d'écrire dans un modèle de langage profondément appris
J'ai essayé d'implémenter Autoencoder avec TensorFlow
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker
J'ai essayé d'implémenter CVAE avec PyTorch
[Deep Learning from scratch] J'ai essayé d'implémenter la couche sigmoïde et la couche Relu
J'ai essayé de visualiser le modèle avec la bibliothèque d'apprentissage automatique low-code "PyCaret"
J'ai essayé d'implémenter la lecture de Dataset avec PyTorch
J'ai essayé le deep learning
J'ai essayé d'extraire le dessin au trait de l'image avec Deep Learning
J'ai essayé de rendre le deep learning évolutif avec Spark × Keras × Docker 2 Multi-host edition
J'ai essayé de déplacer l'apprentissage automatique (détection d'objet) avec TouchDesigner
J'ai essayé d'implémenter Mine Sweeper sur un terminal avec python
J'ai essayé d'implémenter le perceptron artificiel avec python
[Introduction à Pytorch] J'ai essayé de catégoriser Cifar10 avec VGG16 ♬
J'ai essayé d'implémenter Grad-CAM avec keras et tensorflow
[Deep Learning from scratch] J'ai essayé d'expliquer le décrochage
J'ai essayé d'implémenter SSD avec PyTorch maintenant (Dataset)
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 16) J'ai essayé de créer SimpleConvNet avec Keras
"Deep Learning from scratch" Mémo d'auto-apprentissage (n ° 17) J'ai essayé de créer DeepConvNet avec Keras
J'ai essayé d'implémenter PCANet
J'ai essayé d'implémenter StarGAN (1)
J'ai essayé d'implémenter une ligne moyenne mobile de volume avec Quantx
Mayungo's Python Learning Episode 3: J'ai essayé d'imprimer des nombres
J'ai essayé de mettre en œuvre le chapeau de regroupement de Harry Potter avec CNN
J'ai capturé le projet Toho avec Deep Learning ... je le voulais.
J'ai essayé d'implémenter SSD avec PyTorch maintenant (édition du modèle)
J'ai essayé de faire d'Othello AI que j'ai appris 7,2 millions de mains par apprentissage profond avec Chainer
J'ai essayé l'apprentissage automatique avec liblinear
J'ai essayé de mettre en place une validation contradictoire
J'ai essayé l'apprentissage en profondeur avec Theano
J'ai essayé d'implémenter Realness GAN
J'ai essayé d'apprendre LightGBM avec Yellowbrick
J'ai essayé l'apprentissage par renforcement profond (Double DQN) avec ChainerRL
J'ai essayé d'implémenter la classification des phrases par Self Attention avec PyTorch
J'ai essayé d'implémenter PLSA en Python
J'ai essayé d'implémenter la permutation en Python
J'ai essayé de mettre en œuvre une blockchain qui fonctionne réellement avec environ 170 lignes
J'ai essayé de visualiser AutoEncoder avec TensorFlow
J'ai essayé de commencer avec Hy
J'ai essayé d'implémenter PLSA dans Python 2
J'ai essayé d'apprendre avec le Titanic de Kaggle (kaggle②)
Mayungo's Python Learning Episode 2: J'ai essayé de mettre des caractères avec des variables
[Renforcer l'apprentissage] Enfin surpassé les humains! ?? J'ai essayé d'expliquer / d'implémenter Agent57 (Keras-RL)
J'ai essayé d'implémenter ADALINE en Python
(Apprentissage automatique) J'ai essayé de comprendre attentivement la régression linéaire bayésienne avec l'implémentation
J'ai essayé d'implémenter PPO en Python
J'ai essayé de résoudre TSP avec QAOA
J'ai essayé de classer Oba Hanana et Otani Emiri par apprentissage profond
J'ai essayé l'histoire courante de l'utilisation du Deep Learning pour prédire la moyenne Nikkei
J'ai essayé d'implémenter le tri par fusion en Python avec le moins de lignes possible
J'ai essayé d'extraire des expressions uniques avec la bibliothèque de traitement du langage naturel GiNZA
Mayungo's Python Learning Episode 5: J'ai essayé de faire quatre règles avec des nombres
J'ai essayé d'implémenter diverses méthodes d'apprentissage automatique (modèle de prédiction) en utilisant scicit-learn