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

注:本教程最初是准备做为一个 IPython 的手册。

译者注:关于偏微分方程的相关知识,译者推荐读者查看 网易公开课 上的《麻省理工学院公开课:多变量微积分》课程。

基本设置

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

#导入模拟仿真需要的库
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])*255a = 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 simulationstep.run({eps: 0.03, damping: 0.04})# Visualize every 50 stepsif i % 50 == 0:clear_output()DisplayArray(U.eval(), rng=[-0.1, 0.1])

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

原文链接:http://tensorflow.org/tutorials/pdes/index.md 翻译:@wangaicc 校对:@tensorfly

TensorFlow 教程 --教程--2.10偏微分方程相关推荐

  1. [教程10]TensorFlow线性模型教程

    [教程10]TensorFlow线性模型教程 在本教程中,我们将使用TensorFlow中的tf.estimator API来解决二进制分类问题:根据年龄,性别,教育和职业(特征)等个人的普查数据,我 ...

  2. Tensorflow快餐教程(12) - 用机器写莎士比亚的戏剧

    高层框架:TFLearn和Keras 上一节我们学习了Tensorflow的高层API封装,可以通过简单的几步就生成一个DNN分类器来解决MNIST手写识别问题. 尽管Tensorflow也在不断推进 ...

  3. Tensorflow快餐教程(1) - 30行代码搞定手写识别

    摘要: Tensorflow入门教程1 去年买了几本讲tensorflow的书,结果今年看的时候发现有些样例代码所用的API已经过时了.看来自己维护一个保持更新的Tensorflow的教程还是有意义的 ...

  4. TensorFlow Eager 教程(转)

    TensorFlow Eager 教程(转) ApacheCN_飞龙 0.3 2018.07.25 22:41* 字数 9550 TensorFlow Eager 教程 来源:madalinabuza ...

  5. TensorFlow Eager 教程

    TensorFlow Eager 教程 来源:madalinabuzau/tensorflow-eager-tutorials 译者:飞龙 协议:CC BY-NC-SA 4.0 一.如何使用 Tens ...

  6. TensorFlow入门教程(1)安装、基础、Tensorboard

    TensorFlow入门教程 本教程适合人群: - 会些python但不是特别精通 - 机器学习的初学者 本教程预计耗时: - 2-3小时 本教程预计效果: - 掌握TensorFlow的基础操作 - ...

  7. TensorFlow入门教程:1:安装和第一个例子程序

    TensorFlow™ 是Google开源的一个采用数据流图用于数值计算的开源库.截止到目前为止在github上已经获得超过6万个Star,已经成为深度学习和机器学习方面最为受欢迎的项目,炙手可热.这 ...

  8. tensorflow入门教程(三十四)疲劳检测之开眼闭眼识别

    # #作者:韦访 #博客:https://blog.csdn.net/rookie_wei #微信:1007895847 #添加微信的备注一下是CSDN的 #欢迎大家一起学习 # ------韦访 2 ...

  9. GPU运行Tensorflow详细教程及错误解决

    GPU运行Tensorflow详细教程及错误解决 前提条件 配置GPU运行 确认是否成功配置 出现的错误及解决方案 前提条件 最重要的一点:CUDA与tensorflow的版本一点要对应,不然用不了! ...

  10. Python培训教程分享:10款超好用的Python开发工具

    学会Python技术后,我们在参加工作的时候如果能有辅助工具的话,那么会很大程度的提高我们的工作效率,那么Python都有哪些好用的开发工具呢?下面小编就为大家详细的介绍一下10款超好用的Python ...

最新文章

  1. Linux下环境变量配置方法梳理(.bash_profile和.bashrc的区别)
  2. 二部图最大权匹配_12,百度竞价推广账户搭建,关键词匹配-网络运营文字版
  3. 剑指offer_第7题_斐波那契数列
  4. 这样系统的学习分布式,他日必成大器!
  5. 基于MATLAB的小波收缩法信号去噪
  6. 30岁就退休,你也可以做到
  7. 使用extundelete恢复测试liunx的删除文件
  8. 珍藏的软件/工具/网站分享
  9. Unity3D利用代码生成脚本模板
  10. sql 中判断身份证男女等
  11. 工作找了很多,兜兜转转,就是没遇到合适的,怎么办
  12. 【嵌入式系统开发12】在stm32F103C8T6环境下,用HAL库,采用中断模式编程,控制LED的高亮与熄灭
  13. 遥感影像地图分类识别的研究与实现
  14. Opencv实现击中击不中
  15. 鸿蒙系统英文缩写,英文缩写DUNS代表什么?
  16. 固态硬盘正确分区方法,好用的硬盘分区工具
  17. COSAGPS进行GAMIT基线解算数据的平差
  18. Workflow_上传和下载Workflow编译方式(汇总)
  19. 蓝色数据分析关系折线图表格图表合集PPT模板
  20. 不搞笑不给力——年会小品《山寨新闻联播》

热门文章

  1. UDP与TCP对比,TCP保证可靠性传输的详细说明
  2. 嵌入式Linux系统编程学习之八基于文件指针的文件操作
  3. ML、DL、CNN学习记录2
  4. 使用代理_工具的使用|MSF搭建socks代理
  5. SpringBoot 阶段总结
  6. 【最佳实践】企业级 Hotfix 代码合并和系统发版策略
  7. Python : *args和**kwargs是什么东东呢?
  8. yeoman+grunt/gulp+bower构建angular项目
  9. 20145302张薇《Java程序设计》第十周学习总结
  10. Core Animation(核心动画)