[PYTHON] Übergang von Chainer v1 zu Chainer v2

Da Chainer auf 2.0 aktualisiert wurde und nicht mehr abwärtskompatibel ist, werde ich ein modifiziertes Teil schreiben, damit es mit 2.0.2 am Beispiel von AlexNet betrieben werden kann.

Netzwerkteil

Ich denke, dass dieser Teil hauptsächlich geändert wird und nichts anderes geändert werden muss. In Version 1.x wurde die Klassenvererbung direkt im Teil init durchgeführt, in Version 2.x wurde sie jedoch für die Verwendung mit self.init_scope () geändert :. Die Notation des Init-Teils hat sich entsprechend geändert. Zuvor wurde "fc_n = L.function ()" beschrieben, aber "self" wurde als "self.fc_n = L.function ()" hinzugefügt, und das letzte "ist" Du brauchst es nicht mehr.

Beachten Sie, dass, wenn Sie vergessen, "," hier zu löschen, "TypeError:" Tupel "-Objekt kann nicht aufgerufen werden". Ich war süchtig nach diesem Fehler und fragte mich, ob der Datensatz schlechter war.

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

Außerdem wurde der Zug, der nur während des Lernens reflektiert wird, aus der Funktion gelöscht und in with chainer.using_config () angegeben.

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

Grundsätzlich scheint es üblich zu sein, mit dieser chainer.config zu setzen, und usecudnn wird auch damit gesetzt. Wenn Sie "chainer.config.use_cudnn =" never "" schreiben, können Sie festlegen, dass nicht alle gleichzeitig verwendet werden.

Teil wiederholen

Es gibt nichts, was nicht funktioniert, wenn Sie es nicht ändern, aber die Arten von Trainer.extend nehmen zu.

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'))

Es scheint, dass das Diagramm von Verlust und Genauigkeit automatisch durch Schreiben ausgegeben wird, aber es hat nicht gut funktioniert, da gesagt wurde, dass es keine Matplotlib gibt, die in meine Umgebung aufgenommen werden sollte.

Versuche dich zu bewegen

Es fühlt sich an, als hätte ich es geändert und tatsächlich verschoben, aber das Feed-Forward-Netzwerk, das nur aus allgemeinem Linear besteht, hat sich nicht besonders geändert, aber das auf AlexNet basierende Netzwerk ist äußerst lernfähig. Ich fühle mich wie es spät ist. Wahrscheinlich schlecht geschrieben ...

Andere Änderungen sind auch in diesem Beamten geschrieben Chainer docs

Recommended Posts

Übergang von Chainer v1 zu Chainer v2
Summe von 1 bis 10
Änderungen von Python 2 zu Python 3.0
Übergang von WSL1 zu WSL2
Einführung in Private Chainer
Von der Bearbeitung bis zur Ausführung
Mercurial funktioniert nach der Migration von Python 2 auf Python 3 nicht mehr (Hinweis)
Ich habe die Chainer-Referenz gelesen (von Zeit zu Zeit aktualisiert).
Flirte von PHP nach Python
Anaconda aktualisiert von 4.2.0 auf 4.3.0 (python3.5 aktualisiert auf python3.6)
Von Flask-RESTPlus nach Flask-RESTX migriert
Migrationsschritte für python-social-auth v0.2 bis v0.3
Chainer v1.21 wurde veröffentlicht
Aktualisieren Sie python-social-auth von 0.1.x auf 0.2.x.
Migrieren Sie von require.txt zu pipenv
Wechseln Sie von Python2.7 zu Python3.6 (centos7)
Stellen Sie von Python aus eine Verbindung zu SQLite her
SmoothGrad mit Chainer v2 implementiert
Wechseln Sie von der Ubuntu-Installation zur Chainer-Installation, indem Sie Ihren eigenen PC erstellen
git / python> git-Protokollanalyse (v0.1, v0.2)> Implementierung zum Schätzen der Arbeitszeit aus dem git-Protokoll
Der einfachste Weg, um Chainer v1.5 + CUDA + cuDNN unter Windows zu erhalten
Rufen Sie Matlab von Python zur Optimierung auf
Von der Installation von Elasticsearch bis zur Dateneingabe
vtkXMLUnstructuredGridReader Zusammenfassung (von Zeit zu Zeit aktualisiert)
vtkOpenFOAMReader-Zusammenfassung (von Zeit zu Zeit aktualisiert)
Wie man SWIG von waf benutzt
Migration von direct_to_template zu TemplateView nicht möglich
Ingenieur-Wortbuch (von Zeit zu Zeit aktualisiert)
Konvertierung von pdf nach txt 1 [pdfminer]
Programmierung aus Büchern gelernt 10. Mai
Post von Python auf Facebook Timeline
[Lambda] [Python] Von Lambda auf Twitter posten!
Ausgabe von Raspberry Pi an Line
[Einführung] Von der Installation von Kibana bis zum Start
Konvertierung von pdf nach txt 2 [pyocr]
Stellen Sie von Python aus eine Verbindung zur utf8mb4-Datenbank her
OpenMPI-Installation Vom Download bis zum Bestehen
Tensorflow-Memo [von Zeit zu Zeit aktualisiert]
Python (vom ersten Mal bis zur Ausführung)
Poste ein Bild von Python auf Tumblr
Senden Sie Befehle von Atom an Maya
So starten Sie den Explorer über die WSL
Programmierung aus Büchern gelernt 7. Mai
Ab Ubuntu 20.04 Einführung in die Umgebungskonstruktion
SSH-Verbindung von Windows zu GCP
So greifen Sie über Python auf Wikipedia zu
Python, um von einer anderen Sprache zu wechseln
So konvertieren Sie von .mgz nach .nii.gz
Migrieren Sie von VS Code zu PyCharm
pynq-z1 Vom Kauf bis zur Funktionsprüfung
[Veraltet] Chainer v1.24.0 Anfänger-Tutorial
Hat sich nicht von Python 2 auf 3 geändert
Aktualisieren Sie Mac Python von 2 auf 3
Ich habe versucht, den Winkel von Sin und Cos mit Chainer zu lernen