TensorFlow学习笔记(五)

词学习笔记摘自TensorFlow中文社区http://www.tensorfly.cn/

曼德步洛特(Mandelbrot)集合

基本步骤
首先,我们需要导入一些库。

#导入仿真库
import tensorflow as tf
import numpy as np

#导入可视化库
import PIL.Image
from cStringIO import StringIO
from IPython.display import clear_output,Image,display
import scipy.ndimage as nd

现在我们将定义一个函数来显示迭代计算出的图像。

def DisplayFractal(a,fmt='jpeg'):
#显示迭代计算出的彩色分形图像
      a_cyclic=(6.28*a/20).reshape(list(a.shape)=[1])
      img=np.concatenate([10+20*np.cos(a_cylic),30+50*np.sin(a_cylic),155-80*np.cos"(a_cylic),2])
      img[a==a.max()]=0
      a=img
      a=img
      a=np.uint8(np.clip(a,0,255))
      f=StringIO()
      PIL.Image.fromarray(a).save(f,fmt)
      display(Image(data=f.getvalue()))

会话(session)和变量(variable)初始化
为了操作的方便,我们常使用交互式会话(interactive session),但普通会话(regular session)也能正常使用。

sess=tf.InteractiveSession()

我们可以*的混合使用Numpy和TensorFlow,

#使用Numpy创建一个在[-2,2]*[-2,2]范围内的2维复数数组
Y,X=np.mgrid[-1.3:1.3:0.005,-2:1:0.005]
Z=X+1j*Y

现在我们定义并初始化一组TensorFlow的张量(tensor)。

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

TensorFlow在使用之前需要你明确给定变量的初始值。

tf.initialize_all_variables().run()

定义并行计算

#计算一个新值z
zs_=zs*zs+xs

#这个新值会发散吗
not_diverged=tf.complex_abs(zs_)<4

#更新zs并且迭代计算
#说明:在这些值发散之后,我们仍然在计算zs,这个计算消耗特别大
step =tf.group(zs.assign(zs_),ns.assign_add(tf.cast(not_diverged,"float32")))

继续执行几百个步骤

for i in range(200):step.run()
DisplayFractal(ns.eval())

TensorFlow学习笔记(五)

感觉这次的教程用处不大,但多学点没有坏处