[PYTHON] Transition de Chainer v1 à Chainer v2

Puisque Chainer a été mis à jour vers 2.0 et n'est plus rétrocompatible, j'écrirai la partie modifiée afin qu'elle puisse être utilisée avec 2.0.2 en utilisant AlexNet comme exemple.

Partie réseau

Je pense que cette partie est principalement modifiée, et il n'y a rien d'autre à changer. Dans la v1.x, l'héritage de classe était effectué directement dans la partie init, mais dans la v2.x il a été changé pour être utilisé avec self.init_scope ():. La notation de la partie init a changé en conséquence. Auparavant, fc_n = L.function (), était décrit, mais self. était ajouté comme self.fc_n = L.function (), et le dernier`, ʻest Vous n'en avez plus besoin.

Notez que si vous oubliez de supprimer , ici, vous obtiendrez TypeError: 'tuple' object is not callable. J'étais accro à cette erreur, me demandant si l'ensemble de données était pire.

python:v1.x_Alex.py


class Alex(chainer.Chain):
  def __init__(self):
    super(Alex, self).__init__(
      conv1=L.Convolution2D(None,  96, 11, stride=4),
      conv2=L.Convolution2D(None, 256,  5, pad=2),
      conv3=L.Convolution2D(None, 384,  3, pad=1),
      conv4=L.Convolution2D(None, 384,  3, pad=1),
      conv5=L.Convolution2D(None, 256,  3, pad=1),
      fc6=L.Linear(None, 4096),
      fc7=L.Linear(None, 4096),
      fc8=L.Linear(None, 1000),
    )
  self.train = True
...

v2.x_Alex.py


class Alex(chainer.Chain):
  def __init__(self):
    super(Alex, self).__init__()
    with self.init_scope():
      self.conv1 = L.Convolution2D(None,  96, 11, stride=4)
      self.conv2 = L.Convolution2D(None, 256,  5, pad=2)
      self.conv3 = L.Convolution2D(None, 384,  3, pad=1)
      self.conv4 = L.Convolution2D(None, 384,  3, pad=1)
      self.conv5 = L.Convolution2D(None, 256,  3, pad=1)
      self.fc6 = L.Linear(None, 4096)
      self.fc7 = L.Linear(None, 4096)
      self.fc8 = L.Linear(None, 1000)
...

De plus, le train qui n'est reflété que pendant l'apprentissage a été supprimé de la fonction et spécifié dans with chainer.using_config ().

model = L.Classifier(Alex())
with chainer.using_config('train',False):
  y = (x)

Fondamentalement, il semble qu'il soit courant de définir avec ce chainer.config, et ʻusecudnnest également défini avec cela. Si vous écrivezchainer.config.use_cudnn = 'never'`, vous pouvez définir de ne pas utiliser tous à la fois.

Partie répétitive

Il n'y a rien qui ne fonctionne que si vous le modifiez, mais les types de trainer.extend augmentent.

if extensions.PlotReport.available():
  trainer.extend(extensions.PlotReport(['main/loss', 'validation/main/loss'],
                 'epoch', file_name='loss.png'))
  trainer.extend(extensions.PlotReport(['main/accuracy', 'validation/main/accuracy'],
                'epoch', file_name='accuracy.png'))

Il semble que le graphique de perte et de précision soit automatiquement sorti par écrit, mais cela n'a pas bien fonctionné car il a été dit qu'il n'y avait pas de matplotlib qui devrait être inclus dans mon environnement.

Essayez de bouger

J'ai l'impression de l'avoir changé et de l'avoir déplacé, mais le réseau à feed-forward composé uniquement de Linear général n'a pas changé en particulier, mais le réseau basé sur AlexNet est extrêmement d'apprentissage. J'ai l'impression qu'il est tard. Probablement mal écrit ...

D'autres changements sont également écrits dans ce Chainer docs

Recommended Posts

Transition de Chainer v1 à Chainer v2
Somme de 1 à 10
Changements de Python 2 à Python 3.0
Transition de WSL1 à WSL2
Introduction à Private Chainer
De l'édition à l'exécution
Mercurial a cessé de fonctionner après la migration de Python 2 vers Python 3 (Remarque)
J'ai lu la référence Chainer (mise à jour de temps en temps)
Flirter de PHP à Python
Anaconda mis à jour de 4.2.0 à 4.3.0 (python3.5 mis à jour vers python3.6)
Migré de Flask-RESTPlus vers Flask-RESTX
étapes de migration de python-social-auth v0.2 à v0.3
Chainer v1.21 est sorti
Mettre à jour python-social-auth de 0.1.x à 0.2.x
Migrer de requirements.txt vers pipenv
Passer de python2.7 à python3.6 (centos7)
Connectez-vous à sqlite depuis python
Implémentation de SmoothGrad avec Chainer v2
Passez de l'installation d'Ubuntu à l'installation du chainer en créant votre propre ordinateur personnel
git / python> analyse git log (v0.1, v0.2)> Implémentation pour estimer le temps de travail à partir de git log
Le moyen le plus simple d'obtenir Chainer v1.5 + CUDA + cuDNN sous Windows
Appelez Matlab depuis Python pour optimiser
De l'installation d'Elasticsearch à la saisie des données
Résumé de vtkXMLUnstructuredGridReader (mis à jour de temps en temps)
Résumé de vtkOpenFOAMReader (mis à jour de temps en temps)
Comment utiliser SWIG de WAF
Impossible de migrer de direct_to_template vers TemplateView
Livre de mots de l'ingénieur (mis à jour de temps en temps)
Conversion de pdf en txt 1 [pdfminer]
Programmation tirée des livres le 10 mai
Publication de Python sur la chronologie Facebook
[Lambda] [Python] Publier sur Twitter depuis Lambda!
Sortie du Raspberry Pi vers la ligne
[Introduction] De l'installation de kibana au démarrage
Conversion de pdf en txt 2 [pyocr]
Connectez-vous à la base de données utf8mb4 à partir de python
Installation d'OpenMPI Du téléchargement au passage
Mémo Tensorflow [mis à jour de temps à autre]
Python (de la première fois à l'exécution)
Publier une image de Python sur Tumblr
Envoyer des commandes d'Atom à Maya
Comment lancer Explorer à partir de WSL
Programmation tirée des livres le 7 mai
De Ubuntu 20.04 introduction à la construction d'environnement
Connexion SSH de Windows à GCP
Comment accéder à wikipedia depuis python
Python pour passer d'une autre langue
Comment convertir .mgz en .nii.gz
Migrer de VS Code vers PyCharm
pynq-z1 De l'achat au contrôle de fonctionnement
[Déprécié] Tutoriel pour débutant Chainer v1.24.0
N'a pas changé de Python 2 à 3
Mettre à jour Mac Python de 2 à 3
J'ai essayé d'apprendre l'angle du péché et du cos avec le chainer