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