[PYTHON] Il est préférable d'utiliser Weight Initializer lors de l'initialisation avec HeNormal avec Chainer

Qu'est-ce que HeNormal

Une des méthodes d'initialisation du coefficient de poids, également connue sous le nom de "MSRA". Il est utilisé dans l'article de Kaiming He et al., et il semble que l'auteur et Microsoft Research soient à l'origine du nom.

HeNormal initialise le facteur de pondération $ W $ avec un nombre aléatoire qui suit une distribution normale avec un écart type de $ \ sqrt {2 / N} $. Ici, $ N $ est la taille de l'entrée. Dans le cas de links.Linear, c'est la taille du vecteur d'entrée, et dans le cas de links.Convolution2D, c'est le nombre de canaux x hauteur du noyau x largeur du noyau.

N'est-il pas possible de spécifier wscale?

Comme méthode d'initialisation avec HeNormal, math.sqrt (2) peut être spécifié pour wscale lors de la création d'une instance de lien. Par exemple, spécifiez chainer.links.Linear (100, 100, wscale = math.sqrt (2)). Cette méthode est également utilisée dans le modèle Network-in-Network de l'exemple ImageNet de Chainer (https://github.com/pfnet/chainer/blob/master/examples/imagenet/nin.py). Cependant, il s'avère que le comportement de wscale a changé involontairement depuis la v1.9.0. J'ai déjà enregistré un problème. wscale doesn't have backward compatibility Si vous voulez utiliser HeNormal explicitement, vous devriez éviter de le spécifier avec wscale jusqu'à ce que ce problème soit résolu.

Par exemple, si vous dites "initialisé avec HeNormal" lors de la publication du résultat à l'aide de l'implémentation Chainer, ou si vous utilisez HeNormal dans la recherche d'autres équipes et souhaitez organiser la méthode d'initialisation pour la reproduire. , Je pense qu'il vaut mieux utiliser Weight Initializer comme décrit ci-dessous.

Comment utiliser Weight Initializer

Dans Chainer, vous pouvez spécifier comment initialiser le coefficient de pondération en utilisant Weight Initializer. Pour initialiser à l'aide d'Initializer, spécifiez une instance d'initializer dans ʻinitialW` du lien. Exemple:

class MLP(chainer.Chain):

    def __init__(self, n_in, n_units, n_out):
        initializer = chainer.initializers.HeNormal()
        super(MLP, self).__init__(
            l1=L.Linear(None, n_units, initialW=initializer),  # n_in -> n_units
            l2=L.Linear(None, n_units, initialW=initializer),  # n_units -> n_units
            l3=L.Linear(None, n_out, initialW=initializer),  # n_units -> n_out
        )

    ...

Les références

  1. Kaiming He el al. Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification,(2015)

Recommended Posts

Il est préférable d'utiliser Weight Initializer lors de l'initialisation avec HeNormal avec Chainer
Lorsque vous souhaitez l'utiliser tel quel lorsque vous l'utilisez avec lambda memo
Il est plus pratique d'utiliser csv-table lors de l'écriture d'une table avec python-sphinx
Lorsque vous connectez SSD à Linux et créez un serveur de fichiers, il est préférable d'utiliser NTFS.
Quand il est difficile de copier ce que vous avez construit avec vue
N'est-il pas recommandé d'utiliser pip directement?
Utilisation pratique des couches lors du chargement de bibliothèques sur Lambda
[OpenCV] Lorsque vous voulez vérifier s'il est lu correctement avec imread
Autoencoder dans Chainer (Remarques sur l'utilisation de + trainer)
Le grattage avec Python-Selenium est vieux! ?? ・ ・ ・ Comment utiliser Pyppeteer
Utiliser tensorboard avec Chainer
Lorsqu'il est difficile de configurer un serveur SMTP localement lors de l'envoi de courrier avec Python.
[Python] Qu'est-ce qu'un tuple? Explique comment utiliser sans toucher et comment l'utiliser avec des exemples.
Après tout, il est faux de chat avec le sous-processus python.
Est-il possible de détecter des images similaires uniquement avec ImageHash?
Quand j'essaye de pousser avec heroku, ça ne marche pas
[python] Remarques lors de la tentative d'utilisation de numpy avec Cython
Utilisez aggdraw lorsque vous voulez dessiner magnifiquement avec un oreiller
[Langage C] Close () Il est dangereux de réessayer en cas d'échec
[Python] Qu'est-ce qu'une tranche? Une explication facile à comprendre de son utilisation avec un exemple concret
[Python] Qu'est-ce que pip? Expliquez la liste des commandes et comment l'utiliser avec des exemples réels
Le framework de Deep Learning de Microsoft "CNTK" est désormais compatible avec Python, ce qui le rend beaucoup plus facile à utiliser
Utilisation du chainer avec Jetson TK1
Un mémorandum lors de l'acquisition automatique avec du sélénium
Lorsque j'essaye d'utiliser pip, le module SSL n'est pas disponible.