TensorFlow教程之完整教程 2.9 曼德布洛特(Mandelbrot)集合

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权。

曼德布洛特(Mandelbrot)集合

虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子。实际上,这是tensorflow一个非常直截了当的可视化运用。(我们最终也许会提供一种更加精心设计的运用方式来生成真正更加美丽的图像。)

说明:本教程使用了IPython的notebook。

基本步骤

首先,我们需要导入一些库。

# 导入仿真库
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.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()))

会话(session)和变量(variable)初始化

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

   sess = tf.InteractiveSession()

我们可以自由的混合使用NumPy和TensorFlow,这一点非常方便。

# 使用NumPy创建一个在[-2,2]x[-2,2]范围内的2维复数数组

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

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

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: z^2 + x
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())

结果不错!

时间: 2024-10-24 09:55:58

TensorFlow教程之完整教程 2.9 曼德布洛特(Mandelbrot)集合的相关文章

TensorFlow教程之完整教程 2.1总览

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 综述 面向机器学习初学者的 MNIST 初级教程 如果你是机器学习领域的新手, 我们推荐你从本文开始阅读. 本文通过讲述一个经典的问题, 手写数字识别 (MNIST), 让你对多类分类 (multiclass classification) 问题有直观的了解. 面向机器学习专家的 MNIST 高级教程 如果你已经对其它深度学习软件比较熟悉, 并且也对 MNIST 很熟悉, 这篇教程能够引导你对 TensorFl

TensorFlow教程之完整教程 2.8 递归神经网络

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 循环神经网络 介绍 可以在 this great article 查看循环神经网络(RNN)以及 LSTM 的介绍. 语言模型 此教程将展示如何在高难度的语言模型中训练循环神经网络.该问题的目标是获得一个能确定语句概率的概率模型.为了做到这一点,通过之前已经给出的词语来预测后面的词语.我们将使用 PTB(Penn Tree Bank) 数据集,这是一种常用来衡量模型的基准,同时它比较小而且训练起来相对快速. 语

TensorFlow教程之完整教程 2.2MNIST数据下载

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. MNIST 数据下载 本教程的目标是展示如何下载用于手写数字分类问题所要用到的(经典)MNIST数据集. 教程 文件 本教程需要使用以下文件: 文件 目的 input_data.py 下载用于训练和测试的MNIST数据集的源码 准备数据 MNIST是在机器学习领域中的一个经典问题.该问题解决的是把28x28像素的灰度手写数字图片识别为相应的数字,其中数字的范围从0到9. 下载 Yann LeCun's MNIS

TensorFlow教程之完整教程 2.6 卷积神经网络

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 卷积神经网络 注意: 本教程适用于对Tensorflow有丰富经验的用户,并假定用户有机器学习相关领域的专业知识和经验. 概述 对CIFAR-10 数据集的分类是机器学习中一个公开的基准测试问题,其任务是对一组32x32RGB的图像进行分类,这些图像涵盖了10个类别:飞机, 汽车, 鸟, 猫, 鹿, 狗, 青蛙, 马, 船以及卡车. 目标 本教程的目标是建立一个用于识别图像的相对较小的卷积神经网络,在这一过程中

TensorFlow教程之完整教程 2.5 TensorFlow运作方式入门

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 本篇教程的目的,是向大家展示如何利用TensorFlow使用(经典)MNIST数据集训练并评估一个用于识别手写数字的简易前馈神经网络(feed-forward neural network).我们的目标读者,是有兴趣使用TensorFlow的资深机器学习人士. 因此,撰写该系列教程并不是为了教大家机器学习领域的基础知识. 在学习本教程之前,请确保您已按照安装TensorFlow教程中的要求,完成了安装. 教程使

TensorFlow教程之完整教程 2.3 MNIST入门

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 机器学习入门 这个教程的目标读者是对机器学习和TensorFlow都不太了解的新手. 当我们开始学习编程的时候,第一件事往往是学习打印"Hello World".就好比编程入门有Hello World,机器学习入门有MNIST. MNIST是一个入门级的计算机视觉数据集,它包含各种手写数字图片: 它也包含每一张图片对应的标签,告诉我们这个是数字几.比如,上面这四张图片的标签分别是5,0,4,1. 在此

TensorFlow教程之完整教程 2.4 MNIST进阶

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 深入MNIST TensorFlow是一个非常强大的用来做大规模数值计算的库.其所擅长的任务之一就是实现以及训练深度神经网络. 在本教程中,我们将学到构建一个TensorFlow模型的基本步骤,并将通过这些步骤为MNIST构建一个深度卷积神经网络. 这个教程假设你已经熟悉神经网络和MNIST数据集. 安装 在创建模型之前,我们会先加载MNIST数据集,然后启动一个TensorFlow的session. 加载MN

TensorFlow教程之完整教程 2.10 偏微分方程

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 偏微分方程 TensorFlow 不仅仅是用来机器学习,它更可以用来模拟仿真.在这里,我们将通过模拟仿真几滴落入一块方形水池的雨点的例子,来引导您如何使用 TensorFlow 中的偏微分方程来模拟仿真的基本使用方法. 基本设置 首先,我们需要导入一些必要的引用. #导入模拟仿真需要的库 import tensorflow as tf import numpy as np #导入可视化需要的库 import P

CAS单点登录(SSO)完整教程

CAS单点登录(SSO)完整教程(2012-02-01更新) 一.教程说明 前言 教程目的:从头到尾细细道来单点登录服务器及客户端应用的每个步骤 单点登录(SSO):请看百科解释猛击这里打开 本教程使用的SSO服务器是Yelu大学研发的CAS(Central Authentication Server), 官网:http://www.jasig.org/cas 本教程环境: Tomcat6.0.29 JDK6 CAS Server版本:cas-server-3.4.3.1.cas-server-