Après avoir lu immédiatement comprendre GAN! Débutant n'a pas d'importance

Lei Note du réseau Feng: Cet article mil original pluie auteur, savoir presque contenu dans le chroniqueur d'origine - la machine est d'apprendre de Lei Feng Posté avec la permission.

avant-propos

Depuis sa création en 2014, le développement de GAN est très chaud, les applications GAN plus célèbres sont Pix2Pix, CycleGAN et ainsi de suite. Cet article est principalement pour les débutants dans le code pour comprendre le mécanisme de la structure et le fonctionnement de GAN, pas trop description détaillée de la théorie. Nous adoptons des ensembles de données écrites à la main MNIST (ensembles de données ont à dire ce qui est très facile à utiliser pour les novices) que nos données de formation, nous allons construire simple GAN écrit à la main pour générer des images numériques.

comprendre GAN

GAN comprend essentiellement deux parties, à savoir le générateur et le discriminateur de discriminateur de générateur. Builder est principalement utilisé pour étudier la répartition de l'image réelle de telle sorte que l'image elle-même généré plus réel pour tromper le discriminateur. Discriminateur est nécessaire de faire la distinction entre l'image vrai et faux reçus. Tout au long du processus, le générateur difficile de faire la génération d'image plus réaliste, tandis que le discriminateur est difficile de reconnaître les images vraies et fausses, ce processus est équivalent à un jeu à deux, comme le temps passe, le générateur et le discriminateur constamment confronter les deux réseaux finaux ont atteint un équilibre dynamique: le générateur d'image génère une image plus proche de la vraie distribution tout en fait pas la différence d'image discriminateurs de reconnaissance, pour une image donnée est vraie probabilité prédite sensiblement proche de 0,5 (ce qui équivaut à la catégorie de devinette aléatoire).

Pour une compréhension plus intuitive de GAN peut utiliser un exemple pour illustrer: bande contrefaçon générateur équivalent, ils veulent tromper la banque en forgeant l'argent, la fausse monnaie peut faire la négociation normale, tandis que la Banque équivalent à la discrimination, vous devez déterminer l'argent entrant il est de l'argent réel ou contrefait. Le but est de créer un gang de fausse monnaie de la banque ne reconnaît pas la fausse monnaie et tromper la banque, la banque est de trouver des moyens d'identifier avec précision la fausse monnaie.

Par conséquent, nous pouvons réaliser un résumé du contenu de ce qui précède. Compte tenu de vrai = 1, faux = 0, alors il y a:

  • , Vous voulez pour une image réelle donnée (image réelle) pour marquer le discriminateur 1;

  • Pour une image de génération donnée (image fausse), vous voulez marquer le discriminateur 0;

  • Générateur pour générer des images discriminateur passé, le souhait générateur de discriminateur à l'étiquette 1.

Avec ce qui précède la compréhension intuitive, implémentons une données manuscrites GAN pour générer! Il y a quelques détails seront décrits dans la section de code.

explication

  • tensorflow 1.0

  • Python 3

  • Notebook Jupyter

  • GitHub Adresse: NELSONZHAO / zhihu

Recommandé que vers le bas pull code, certains ne codent pas écrire à réaliser dans l'article.

code section

le chargement et l'affichage des données

Nous avons utilisé des données tensorflow donné interface de données MNIST.

Avant de construire le modèle, nous examinons d'abord ce que nous devons accomplir la tâche:

  • entrées

  • générateur

  • discriminateur

  • Les paramètres définis

  • perte et optimiseur

  • entraîneur

  • Affichage des résultats

Entrez les entrées

La fonction principale est de définir l'entrée et génère une image réelle image deux tenseur.

générateur défini

Notre générateur est structuré comme suit:

Nous utilisons la couche cachée au moyen d'un Leaky RELU comme fonction d'activation, et la fonction d'activation tanh ajouté dans la couche de sortie.

Ce qui suit est un générateur de code. Remarque Lors de la définition générateur et le discriminateur, nous voulons préciser la portée des variables, car GAN comprend en fait deux générateurs avec un réseau discriminateur, tandis que la formation dans la formation séparée suivi, donc nous voulons définir la portée bonne, variable spécifiée temps de formation pratique.

Dans ce réseau, nous avons utilisé une couche cachée, et ajouter l'abandon éviter surajustement. En images sonores, entrée image de sortie du générateur en taille réelle de l'image.

Voici notre fonction d'activation de la couche cachée utilise un Leaky Relu (chinois ne savent pas comment la traduction), cette fonction modifie la définition de la moitié gauche de la fonction sur la base de Relu.

Photo de Wikipedia. Andrej Karpathy dans CS231n a également mentionné les modèles ont cette fonction pour obtenir de bons résultats.

Depuis tensorflow cette fonction ne soit pas mis en uvre, où nous avons atteint Leaky Relu définie par une fonction, où alpha est un petit nombre. Dans la couche de sortie, nous utilisons la fonction tanh parce tanh ici par rapport aux résultats sigmoïde sera encore mieux (Il est à noter ici, étant donné que le générateur de pixel d'image génère une valeur limite entre le (-1, 1), l'intervalle pixel MNIST ensemble de données est , donc au moment de la formation de MNIST nous nous occupons de l'entrée, consultez la section spécifique de la formation de code) . Ceci, nous construisons un bon générateur, qui produit une image comme la taille réelle de l'image en recevant une image sonore.

définir discriminateur

La structure est déterminée comme suit:

Discriminateur recevant une image, et détermine si elle est vraie, la couche cachée en utilisant le même Leaky RELU, une couche de sortie de noeuds, la probabilité d'une sortie est. Code est la suivante:

Ici, nous devons faire attention et générer des images réelles d'image sont discriminateur de paramètres partagés, alors voici nous avons laissé derrière nous réutilisons des interfaces pour faciliter l'appel.

Les paramètres définis

img_size est notre vraie taille de l'image = 32 * 32 = 784.

paramètre lisse Étiquette Lissage Régularisation est dans le dos sera introduit.

La construction du réseau

Ensuite, nous construisons notre réseau et l'accès au générateur variable et discriminateur revenus.

On nous a donné un générateur et logits et sorties discriminante. Notez que l'image est réelle image et générer des paramètres partagés, de sorte que lorsque l'entrée discriminateur a généré des images, vous devez réutiliser les paramètres.

La définition de la perte et l'Optimiseur

Avec les logits ci-dessus, nous pouvons définir notre perte et Optimizer. Avant cela, regardons ce que chaque générateur de discriminateur et objectifs:

  • Pour une image réelle donnée, vous voulez marquer le discriminateur 1;

  • Pour une génération des images de données que vous souhaitez marquer le discriminateur 0;

  • Générateur pour générer des images discriminateur passé, le souhait générateur de discriminateur à l'étiquette 1.

Nous devons convertir ces trois mots en code ci-dessus:

d_loss_real correspond à l'image réelle de la perte, il est possible de faire une sortie du discriminateur proche de 1. Ici, nous utilisons l'étiquette unilatérale Lissage Régularisation, il est un moyen approprié pour éviter aussi, dans la catégorie traditionnelle, nous visons à 0 ou 1, intuitivement compris dans les mots, un tel objectif n'est pas assez mou, modèle se traduira par une formation pour leurs prédictions trop confiants. Donc, nous ajoutons de la valeur pour permettre une meilleure discriminateur effet de généralisation lisse.

d_loss_fake perte générée images correspondant, il est possible de faire une sortie du discriminateur est 0.

d_loss_real et d_loss_fake ajouter à la perte de l'ensemble discriminateur.

Du côté du générateur, il veut laisser l'arbitre de leur propre produit sortie d'image à 1 possible, il est confrontation discriminateur équivalent.

Ici, nous définissons la fonction d'optimisation, puisque le GAN contient deux générateurs et discriminateur réseau, doit être optimisé séparément, ce qui est la raison pour laquelle nous définissons variable_scope avant.

entraîneur

La formation fait partie du code est trop long, je ne suis pas ici pour tenir le coup, allez à mon GitHub télécharger le code. Dans la section de formation, nous avons enregistré la partie du processus de génération d'image et enregistrer les changements dans la perte de données de formation.

Nous allons changer le processus de formation de la perte tirée:

De la figure, on peut voir, l'arbitre final fluctuant d'ensemble autour d'une perte, et la perte fausse fluctuation de perte réelle presque dans une ligne horizontale, ce qui montre le discriminateur final pour discriminer entre les images vraies et fausses ont pas la capacité, mais Analyse aléatoire .

Affichage des résultats du processus

Nous avons enregistré le processus de formation de 25 échantillons à différents stades d'échantillons d'image pour sérialiser un moyen d'économiser, nous viendrons échantillons chargés. échantillons de taille = x 2 x époques N_SAMPLES x 784, notre nombre d'itérations à 300, 25 échantillons, par conséquent, des échantillons de taille = 300 x 2 x 25 x 784. Nous allons générer le tour final des résultats imprimés sur:

Ceci est le résultat de notre image par GAN après avoir appris la vraie image de la distribution générée.

Donc, certains étudiants pourraient se demander, si nous voulons voir ce 300 changements image générée de ce que la façon de le faire? Parce que nous avons déjà des échantillons, le stockage des résultats de chaque tour d'itération, nous pouvons prendre quelques itérations, les images correspondantes jouent sur:

Ici, je choisi le premier 0, 5, 10, 20, 40, 60, 80, 100, 150, 250 itérations rendus, dans ce graphique, on peut voir le début que le milieu est blanc, fond noir. bloc, il y a beaucoup de bruit. Avec le nombre croissant d'itérations, la capacité de générer la fabrication de « carte de faux » de plus en plus forte et plus forte, il a distribué apprendre progressivement la vraie image, le point le plus évident est de distinguer les limites de l'image un fond noir et caractères blancs.

Générer une nouvelle image

Si nous voulons régénérer une nouvelle image de celui-ci? À ce stade, nous ne devons sauver avant notre arrivée bon fichier modèle est chargé peut être des amis.

résumé

toute MNIST article basé sur un ensemble de données construit un modèle simple de GAN, je crois qu'un petit partenaire pour lire le GAN de code aura une compréhension préliminaire. D'après les résultats, le modèle final, l'image générée peut être séparée de la région d'arrière-plan numérique, un bloc noir bruit disparaissent peu à peu, mais les résultats montrent, il y a encore de nombreux domaines de la logique floue.

Pour le traitement d'image ici, je crois que beaucoup de petits partenaires pensent convolution réseau de neurones, puis plus tard, nous serons générés et le discriminateur au lieu réseau de neurones convolution pour construire la profondeur de convolution GAN, il a fait pour une meilleure image va générer effet.

Si vous vous sentez bien, s'il vous plaît donner un point GitHub étoile il ~

Après que l'homme du déraillement de 90 voiture a trouvé sa femme âgée de 50 ans poignardé à mort un rival courriers
Précédent
débuts Glory V20: lors de la première caméra de la caméra arrière écran trois traitement GPU nuage transversal puissant
Prochain
définition de signal d'interface Wishbone de "Bowen série"
Switch « Night & fin boucle émetteur boucle de nuit mètres » collection sera lancée en même temps la version chinoise
« Vieille bête » et bousculé un fichier donné 12 · 11, a été nommé pour quatre Golden Horse dans la partie continentale le plus chaud film
Une bonne grosse vague à venir de l'école! Kunming introduire six écoles! Adresse cette année, il y a un grand mouvement ......
2018 le plus digne de début wrap machine publication annuelle phare gloire V20 seulement 2999 yuans
ZTE perdre l'autre côté de demander 43,3 millions $ aux États-Unis a été condamné Huawei a également subi des poursuites
Le transport d'un lave-linge traversant l'Himalaya! Les Chinois ne connaissent pas l'histoire par les Japonais ont découvert
Burst! Ce matin, l'arrière-end de quatre voitures Jinan-Qingdao! Zibo Méfiez-vous de ces endroits faciles à bloquer les vacances
Kotobukiya a publié « différents degrés Excalibur 2 » modèle mech Sirènes est prévu plus tard cette année en vente
A propos de 2019 choses de sécurité qui ont une interprétation approfondie
Micron marchandises est interdit en Chine continentale et la lutte DRAM US se réchauffe
« Gestapo Assassiner » bouche à oreille acclamer réduction de gunfight Epopée populaire Seconde Guerre mondiale