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

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

偏微分方程

TensorFlow 不仅仅是用来机器学习,它更可以用来模拟仿真。在这里,我们将通过模拟仿真几滴落入一块方形水池的雨点的例子,来引导您如何使用 TensorFlow 中的偏微分方程来模拟仿真的基本使用方法。

基本设置

首先,我们需要导入一些必要的引用。

#导入模拟仿真需要的库
import tensorflow as tf
import numpy as np

#导入可视化需要的库
import PIL.Image
from cStringIO import StringIO
from IPython.display import clear_output, Image, display

然后,我们还需要一个用于表示池塘表面状态的函数。

def DisplayArray(a, fmt='jpeg', rng=[0,1]):
  """Display an array as a picture."""
  a = (a - rng[0])/float(rng[1] - rng[0])*255
  a = np.uint8(np.clip(a, 0, 255))
  f = StringIO()
  PIL.Image.fromarray(a).save(f, fmt)
  display(Image(data=f.getvalue()))

最后,为了方便演示,这里我们需要打开一个 TensorFlow 的交互会话(interactive session)。当然为了以后能方便调用,我们可以把相关代码写到一个可以执行的Python文件中。

sess = tf.InteractiveSession()

定义计算函数

def make_kernel(a):
  """Transform a 2D array into a convolution kernel"""
  a = np.asarray(a)
  a = a.reshape(list(a.shape) + [1,1])
  return tf.constant(a, dtype=1)

def simple_conv(x, k):
  """A simplified 2D convolution operation"""
  x = tf.expand_dims(tf.expand_dims(x, 0), -1)
  y = tf.nn.depthwise_conv2d(x, k, [1, 1, 1, 1], padding='SAME')
  return y[0, :, :, 0]

def laplace(x):
  """Compute the 2D laplacian of an array"""
  laplace_k = make_kernel([[0.5, 1.0, 0.5],
                           [1.0, -6., 1.0],
                           [0.5, 1.0, 0.5]])
  return simple_conv(x, laplace_k)

定义偏微分方程

首先,我们需要创建一个完美的 500 × 500 的正方形池塘,就像是我们在现实中找到的一样。

N = 500

然后,我们需要创建了一个池塘和几滴将要坠入池塘的雨滴。

# Initial Conditions -- some rain drops hit a pond

# Set everything to zero
u_init = np.zeros([N, N], dtype="float32")
ut_init = np.zeros([N, N], dtype="float32")

# Some rain drops hit a pond at random points
for n in range(40):
  a,b = np.random.randint(0, N, 2)
  u_init[a,b] = np.random.uniform()

DisplayArray(u_init, rng=[-0.1, 0.1])

现在,让我们来指定该微分方程的一些详细参数。

# Parameters:
# eps -- time resolution
# damping -- wave damping
eps = tf.placeholder(tf.float32, shape=())
damping = tf.placeholder(tf.float32, shape=())

# Create variables for simulation state
U  = tf.Variable(u_init)
Ut = tf.Variable(ut_init)

# Discretized PDE update rules
U_ = U + eps * Ut
Ut_ = Ut + eps * (laplace(U) - damping * Ut)

# Operation to update the state
step = tf.group(
  U.assign(U_),
  Ut.assign(Ut_))

开始仿真

为了能看清仿真效果,我们可以用一个简单的 for 循环来远行我们的仿真程序。

# Initialize state to initial conditions
tf.initialize_all_variables().run()

# Run 1000 steps of PDE
for i in range(1000):
  # Step simulation
  step.run({eps: 0.03, damping: 0.04})
  # Visualize every 50 steps
  if i % 50 == 0:
    clear_output()
    DisplayArray(U.eval(), rng=[-0.1, 0.1])

看!! 雨点落在池塘中,和现实中一样的泛起了涟漪。

时间: 2024-11-05 18:50:08

TensorFlow教程之完整教程 2.10 偏微分方程的相关文章

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.3 MNIST入门

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

TensorFlow教程之完整教程 2.1总览

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

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

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

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

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

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

本文档为TensorFlow参考文档,本转载已得到TensorFlow中文社区授权. 曼德布洛特(Mandelbrot)集合 虽然可视化曼德布洛特(Mandelbrot)集合与机器学习没有任何关系,但这对于将TensorFlow应用在数学更广泛的领域是一个有趣的例子.实际上,这是tensorflow一个非常直截了当的可视化运用.(我们最终也许会提供一种更加精心设计的运用方式来生成真正更加美丽的图像.) 说明:本教程使用了IPython的notebook. 基本步骤 首先,我们需要导入一些库. #

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-