[PYTHON] Bedingte GAN mit Chainer implementiert

Einführung

Ich habe Conditional GAN mit Chainer implementiert. Github - https://github.com/lyakaap/GAN/tree/master/ConditionalGAN

Für die Implementierung habe ich auf den folgenden Artikel verwiesen. http://qiita.com/ysasaki6023/items/55b8545c296ce32ac135

Kommentar

"Bedingte GAN" ist eine Art GAN, und es ist ein wunderbares Modell, mit dem Sie das generierte Bild einer beliebigen Klasse erstellen können, indem Sie die Beschriftung angeben, während Sie das mit der herkömmlichen GAN generierte Bild nicht steuern können. .. Darüber hinaus können andere Bedingungen als Etiketten angegeben werden, und verschiedene Anwendungen sind möglich. Der Unterschied zum Haupt-GAN besteht darin, dass es auch die Etikettendaten übergibt, die der Eingabe des Generators und des Diskriminators entsprechen.

Implementierung

Bei der Implementierung wird berücksichtigt, wie das Label an das Netzwerk übergeben werden kann. Nehmen wir als Beispiel MNIST mit 10 Klassen.

Generator

Werden mit chainer's concat () angehängt.

Insbesondere wenn ich jede Form schreibe,

Es ist geworden. Die "1", die gemeinsam mit den obigen drei Tensoren an die dritte Dimension angehängt wird, ist die Anzahl der Kanäle (natürlich wird sie 3, wenn es sich um RGB-Bilder handelt).

Die Eingabe stellt den Tensor dar, der schließlich zur Eingabe des Generators wird, und wird als "Eingabe = F.concat ((z, l), Achse = 1)" kombiniert.

Discriminator

Wenn es auf DCGAN basiert, befindet sich das Netzwerk in der Faltungsschicht, sodass Sie das One-Hot-Label nicht so übergeben können, wie es ist. Also habe ich den Discriminator-Eingang wie unten gezeigt definiert.

スクリーンショット 2017-07-11 20.01.38.png

Im obigen Beispiel ist das Eingabebild "2", sodass der entsprechende zweite Kanal gefüllt ist. Indem das One-Hot-Label auf diese Weise wie ein 10-Kanal-Bild behandelt wird, ist es auch mit Convolution kompatibel. Letztendlich wird das kombinierte Beschriftungs- und Eingabebild als 11-Kanal-28x28-Bild (MNIST-Bildgröße) an die Discriminator-Eingabeebene übergeben. Die spezifische Eingabeform ist (Mini-Stapelgröße, 10 + 1 Kanäle, 28, 28) Es sieht aus wie. Concat () wird wie Generator zum Binden verwendet.

Ergebnis

Ich habe die Beschriftung des erzeugten Bildes Zeile für Zeile von oben angegeben und die angeordneten visualisiert.

Es ist ein Zustand des Lernens

ConditionalGAN.gif

Sie können sehen, dass wir lernen, dem angegebenen Etikett richtig zu entsprechen.

Als Bonus werde ich auch das nach 300 Epochen erzeugte Bild veröffentlichen, wenn der Ursprung des Eingangsrauschraums als Eingabe verwendet wird. (Die Ausgabe der gleichen Nummer ist natürlich die gleiche)

image180000.png

Wenn man sich die erzeugten Bilder ansieht, macht es Spaß zu sehen, dass die Ursprünge des Rauschraums miteinander verbunden sind, um ein sauberes und neutrales Bild zu erzeugen.

Ich habe auch ein Skript erstellt, das das entsprechende Bild anzeigt, wenn Sie eine beliebige Zahl als Argument eingeben. Selbst mit derselben Nummer werden verschiedene handschriftliche Zeichen der Handschrift ausgegeben.

$ python digit_generator.py --digits 20170710
スクリーンショット 2017-07-12 17.28.22.png スクリーンショット 2017-07-12 17.28.02.png

Es wäre interessant, dies mit einem Hiragana-Datensatz zu tun.

Andere

Ich war überrascht, dass Chainer keine One-Hot-Labeling-Funktion wie beim Tensorflow hat. (Vielleicht habe ich es einfach übersehen) Sie können scikit-learn verwenden ...

Übrigens sieht meine Implementierung so aus.

def to_onehot(label, class_num):
    return numpy.eye(class_num)[label]

Wenn Sie das Label und die Anzahl der Klassen übergeben, wird ein One-Hot-Label basierend auf der Einheitenmatrix ausgegeben.

Recommended Posts

Bedingte GAN mit Chainer implementiert
Effizientes GAN mit Keras implementiert
SmoothGrad mit Chainer v2 implementiert
Seq2Seq (1) mit Chainer
Versuchen Sie, RBM mit Chainer zu implementieren.
Word2vec mit Theano + Keras implementiert
Erzeugung des Junk-Zeichens MNIST (KMNIST) mit cGAN (bedingtes GAN)
Lernen Sie mit Chainer elliptische Bahnen
Seq2Seq (3) ~ CopyNet Edition ~ mit Chainer
Ich habe versucht, VQE mit Blueqat zu implementieren
Verwendung von Chainer mit Jetson TK1
Neuronales Netz beginnend mit Chainer
Bildunterschriftengenerierung mit Chainer
Deep Embedded Clustering mit Chainer 2.0
Ein bisschen im Kettenschiff stecken
Zura mit Softmax-Funktion implementiert
[Textklassifizierung] Ich habe versucht, Faltungsneurale Netze für die Satzklassifizierung mit Chainer zu implementieren
Implementierter Dateidownload mit Python + Bottle
Mehrschichtiges Perzeptron mit Kette: Funktionsanpassung
Versuchen Sie, Pferderennen mit Chainer vorherzusagen
Ich habe versucht, Attention Seq2Seq mit PyTorch zu implementieren
Führen Sie eine Inferenz mit dem Chainer 2.0 MNIST-Beispiel durch
Generieren Sie gefälschte Tabellendaten mit GAN
Verwenden von Chainer mit CentOS7 [Umgebungskonstruktion]
Versuchen Sie Common Representation Learning mit Chainer
Seq2Seq (2) ~ Achtung Model Edition ~ mit Chainer
Implementierte Inter-Frame-Differenzmethode mit OpenCV