[PYTHON] Tutoriel TensorFlow - Ensemble de Mandelbrot (traduction)

Tutoriel TensorFlow (ensemble de Mandelbrot) https://www.tensorflow.org/versions/master/tutorials/mandelbrot/index.html#mandelbrot-set C'est une traduction de. Nous sommes impatients de signaler toute erreur de traduction.


La visualisation des ensembles de Mandelbrot n'est pas de l'apprentissage automatique, mais c'est un exemple amusant de la façon d'utiliser TensorFlow pour les mathématiques générales. Il s'agit en fait d'une implémentation assez simple de la visualisation, mais elle garde le point. (Plus tard, nous pouvons fournir une implémentation plus élaborée ci-dessous pour produire une image plus vraiment belle.)

Remarque: ce didacticiel a été préparé à l'origine pour le bloc-notes IPython.

configuration de base

Vous avez besoin de quelques importations pour commencer.

# Import libraries for simulation
import tensorflow as tf
import numpy as np

# Imports for visualization
import PIL.Image
from cStringIO import StringIO
from IPython.display import clear_output, Image, display
import scipy.ndimage as nd

Définit une fonction qui reçoit un nombre d'itérations et affiche réellement l'image.

def DisplayFractal(a, fmt='jpeg'):
  """Display an array of iteration counts as a
     colorful picture of a fractal."""
  a_cyclic = (6.28*a/20.0).reshape(list(a.shape)+[1])
  img = np.concatenate([10+20*np.cos(a_cyclic),
                        30+50*np.sin(a_cyclic),
                        155-80*np.cos(a_cyclic)], 2)
  img[a==a.max()] = 0
  a = img
  a = np.uint8(np.clip(a, 0, 255))
  f = StringIO()
  PIL.Image.fromarray(a).save(f, fmt)
  display(Image(data=f.getvalue()))

Initialisation de session et de variable

J'utilise souvent des sessions interactives pour bricoler, mais cela fonctionne de la même manière pour les sessions régulières.

   sess = tf.InteractiveSession()

NumPy et TensorFlow peuvent être mélangés librement, ce qui est pratique.

# Use NumPy to create a 2D array of complex numbers on [-2,2]x[-2,2]

Y, X = np.mgrid[-1.3:1.3:0.005, -2:1:0.005]
Z = X+1j*Y

Définit et initialise le tenseur TensorFlow.

xs = tf.constant(Z.astype("complex64"))
zs = tf.Variable(xs)
ns = tf.Variable(tf.zeros_like(xs, "float32"))

Dans TensorFlow, les variables doivent être explicitement initialisées avant de pouvoir être utilisées.

tf.initialize_all_variables().run()

Définition et exécution des calculs

Spécifiez plusieurs calculs ...

# Compute the new values of z: z^2 + x
zs_ = zs*zs + xs

# Have we diverged with this new value?
not_diverged = tf.complex_abs(zs_) < 4

# Operation to update the zs and the iteration count.
#
# Note: We keep computing zs after they diverge! This
#       is very wasteful! There are better, if a little
#       less simple, ways to do this.
#
step = tf.group(
  zs.assign(zs_),
  ns.assign_add(tf.cast(not_diverged, "float32"))
  )

... et faites-le 200 étapes

for i in range(200): step.run()

Jetons un coup d'œil à ce que nous avons.

DisplayFractal(ns.eval())

図

Pas mal!

Recommended Posts

Tutoriel TensorFlow - Ensemble de Mandelbrot (traduction)
Tutoriel TensorFlow - TensorFlow Mechanics 101 (Traduction)
Tutoriel TensorFlow - Reconnaissance d'image (traduction)
Tutoriel TensorFlow - Téléchargement de données MNIST (traduction)
Modèle de transformation de séquence de didacticiel TensorFlow (traduction)
Tutoriel TensorFlow - Équation différentielle partielle (traduction)
Tutoriel TensorFlow - Réseau neuronal à convolution (traduction)
Traduction TensorFlow MNIST pour les débutants en ML
Tutoriel TensorFlow - Représentation vectorielle des mots (traduction)
TensorFlow Deep MNIST pour la traduction d'experts