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!
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.
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)
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! !! ~~
~~ 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