[NNabla] Comment ajouter une nouvelle couche entre les couches intermédiaires d'un réseau pré-construit

introduction

Ceci est le troisième message de qiita. (article3) Dans la continuité de la dernière fois, alors que j'utilisais nnabla, j'ai réussi à me sentir comme "j'aurais aimé avoir ce genre d'informations dans qiita" Résumé de ce que j'ai trouvé dans la référence nnabla et dir () (fonction python standard, qui renvoie des variables membres et des fonctions d'arguments) Je vais.

1. Exigences

-OS: macOS Catalina (version 10.15.1) ・ Python: 3.5.4 ・ Nnabla: 1.3.0

2. Construire un réseau

L'exemple de réseau est défini ci-dessous. (Identique à Dernière fois jusqu'à présent)

article3_add_layer.py


import nnabla as nn
import nnabla.functions as F

# [define network]
x = nn.Variable()
y = F.add_scalar(x, 0.5)  # <-- (1)loin
y = F.mul_scalar(y, -2)

C'est simplement sous la forme $ y = (x + 0,5) \ times2 $.

3. Ajouter un nouveau calque entre les calques intermédiaires existants

Dernière fois $ y = (x + 0.5) \ times2 $ above $ y = (x + 0.5) ^ 2 \ times2 en utilisant le contenu expliqué ci-dessus Je vais vous montrer comment le changer en $. Le code est ci-dessous.

article3_add_layer.py


# [get middle variable]
h1 = y.parent.inputs[0]
additional_layer = F.pow_scalar(h1, 2.0)
redefine_layer = F.mul_scalar(additional_layer, **y.parent.info.args)

# [rewire_on]
y.rewire_on(redefine_layer)

La vérification du fonctionnement a été effectuée ci-dessous juste avant rewire_on ci-dessus, avec impression entre les deux.

article3_add_layer.py


def print_func(f):
    print('{} output = {}'.format(f.name, f.outputs[0].d))

# [print & forward]
x.d.fill(0)
y.forward()
print('--- before ---')
y.visit(print_func)
print('y.d = {}'.format(y.d))
print('')

# [rewire_on]
y.rewire_on(redefine_layer)

# [print & forward]
y.forward()
print('--- after ---')
y.visit(print_func)
print('y.d = {}'.format(y.d))
print('')

production

--- before ---
AddScalar output = 0.5
MulScalar output = -1.0
y.d = -1.0

--- after ---
AddScalar output = 0.5
PowScalar output = 0.25
MulScalar output = -0.5
y.d = -0.5

Commentaire

4. Résumé

J'ai présenté comment insérer un nouveau calque. Vous pouvez également l'utiliser pour insérer une couche de quantification dans la sortie de chaque activation d'un modèle entraîné existant, ou pour convoluer Convolution + Normalisation par lots en une seule Convolution. La prochaine fois, je parlerai de ce domaine.

Recommended Posts

[NNabla] Comment ajouter une nouvelle couche entre les couches intermédiaires d'un réseau pré-construit
[NNabla] Comment obtenir la sortie (variable) de la couche intermédiaire du réseau construit
[NNabla] Comment supprimer le niveau intermédiaire d'un réseau prédéfini
Comment calculer la volatilité d'une marque
Visualisez la couche interne du réseau neuronal
Bases de PyTorch (2) -Comment créer un réseau de neurones-
[Analyse morphologique] Comment ajouter un nouveau dictionnaire à Mecab
[Ubuntu] Comment supprimer tout le contenu du répertoire
Comment trouver le coefficient de mise à l'échelle d'une ondelette bipolaire
Comment connecter le contenu de la liste dans une chaîne de caractères
Comment dessiner facilement la structure d'un réseau de neurones sur Google Colaboratory à l'aide de "convnet-tiroir"
Comment prendre une capture d'écran de l'écran Chrome (l'empêcher de se couper au milieu)
Comment déterminer l'existence d'un élément sélénium en Python
Comment vérifier la taille de la mémoire d'une variable en Python
Comment vérifier la taille de la mémoire d'un dictionnaire en Python
Comment trouver l'adresse mémoire de la valeur de la trame de données Pandas
Comment afficher le résultat de sortie de la commande man Linux dans un fichier
Comment obtenir les coordonnées de sommet d'une entité dans ArcPy
Une commande pour vérifier facilement la vitesse du réseau sur la console
J'ai essayé d'améliorer la précision de mon propre réseau neuronal
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
Comment mettre un numéro de ligne au début d'un fichier CSV
Comment créer un wrapper qui préserve la signature de la fonction à envelopper
Comment lire une vidéo tout en regardant le nombre d'images (Mac)
Comment ajouter un package avec PyCharm
Comment vérifier la version de Django
Obtenez la valeur de la couche intermédiaire de NN
Ajouter une couche à l'aide du backend Keras
Comment passer le résultat de l'exécution d'une commande shell dans une liste en Python
Comment mentionner un groupe d'utilisateurs avec une notification de mou, comment vérifier l'ID d'un groupe d'utilisateurs
Pour générer une valeur au milieu d'une cellule avec Jupyter Notebook
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
Un mémorandum expliquant comment exécuter la commande magique! Sudo dans Jupyter Notebook
Je veux ajouter du silence pendant 1 seconde au début d'un fichier wav
Comment faire un Raspberry Pi qui parle les tweets d'un utilisateur spécifié
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Une nouvelle forme d'application qui fonctionne avec GitHub: Comment créer des applications GitHub
Comment trouver la zone du diagramme de Boronoi
Comment ajouter un chemin de recherche de module Python
Comment implémenter un nouveau pilote de processeur CPUFreq
[Java] Comment basculer entre plusieurs versions de Java
[Wagtail] Ajouter une page de connexion au projet Wagtail
Comment afficher la date de modification d'un fichier en langage C jusqu'à nanosecondes
Comment identifier l'élément avec le plus petit nombre de caractères dans une liste Python?
[Ruby] Comment remplacer uniquement une partie de la chaîne de caractères correspondant à l'expression régulière?
Comment vérifier en Python si l'un des éléments d'une liste est dans une autre liste
L'explication la plus simple au monde sur la création de LINE BOT (1) [Account preparation]
Un mémo sur la façon de surmonter le problème difficile de la capture d'effets avec l'IA
Une histoire sur la tentative d'introduire Linter au milieu d'un projet Python (Flask)
Comment changer l'image générée de GAN en une image de haute qualité à votre goût
Ajouter une fonction pour indiquer la météo d'aujourd'hui au bot slack (fabriqué par python)
Lire la source Python-Markdown: Comment créer un analyseur
Comment connaître le numéro de port du service xinetd
Comment écrire une interface graphique à l'aide de la commande maya
Comment obtenir le nombre de chiffres en Python
Ajoutez des informations au bas de la figure avec Matplotlib
Comment créer un sous-menu avec le plug-in [Blender]