要说史上最著名的猫,大概就是薛定谔的那只了。它被关在装有少量镭和氰化物的密闭容器里,当镭发生衰变时,就会触发机关打碎装有氰化物的瓶子,猫就会死亡;如果镭不发生衰变,猫就会存活下来。在量子力学理论中,由于放射性的镭处于衰变和没有衰变两种状态的叠加,这只猫也处于生死叠加态,只有对其进行观测,才能决定这只猫的生死。

所以,哈姆雷特说:

生存还是死亡,这是一个问题!

今天我们从猫说起,来讨论一个管道,一个蕴含着某些不确定性的管道:TensorFlow。我们从TensorFlow中的一个计算实例出发,在这个例子中的一个计算节点像薛定谔的猫一样具备不确定性的输出结果:如下图所示的例子,同时计算节点assign和节点c时,c的计算结果out_c是不确定的,这是因为TensorFlow会尽可能的对计算过程并行化,所以out_c的结果依赖assign和c谁先执行。

那么面对这样一个可能会产生“薛定谔现象”的框架,我们如何利用它来实现模型呢?

我们在使用TensorFlow这个软件库构建模型时,实际上是在TensorFlow提供的这套api系统里编写TF程序,这里可以把TensorFlow看成是一门进行数值计算的“编程语言”。那么为了更好的掌握TF这么“语言”,我们可以从三个层次来学习:

  • 理解TensorFlow的基本概念和基本组件

  • 基于对基本概念的理解,利用基本组件来构建模型

  • 调试模型,优化模型速度,优化模型精度

这里我们从理解基本概念以及一个调试模型的例子出发,来介绍其实现模型计算的过程。

TensorFlow的核心是通过数据流图的方式来实现数值计算,这里最核心的概念就是数据流图,TensorFlow是以静态图(这里不强调其动态图的特性)的方式来表达计算,那么一旦计算模型以图的方式表达完成,就要通过Session来驱动计算,整体示意如上图所示,节点和边构成了你的计算模型,而实际计算时数据(Tensor)沿着图的边被驱动着进行计算从而流动起来,这也形象的表示了TensorFlow=Tensor+Flow。因此TensorFlow程序就可以分为两个阶段:

  • 阶段一:组装一个计算图,这里只是用TF的api来表达计算模型,生成的是一个静态图,图由计算的节点以及节点之间的连接表示,这个阶段只是静态的表示了计算,因此得不到任何实际的计算值。

  • 阶段二:通过一个Session(会话)来执行计算,这里可以计算某个节点,而这个节点所依赖的父节点都会被驱动先行执行。

比如我们想从下图所示的数据(X,Y)中学习一个线性关系y=w*x+b

对于这样一个机器学习任务,一般分为测试过程和训练过程,测试过程一般比较简单,这里我们介绍如何使用TensorFlow来实现训练过程,对于机器学习模型的训练过程的一般可以如下面流程图所示:

具体步骤为:

1.    定义输入和输出标签

2.    定义模型参数

3.    初始化模型参数

4.    基于输入和模型参数,由模型的推理过程计算模型的预测结果

5.    基于模型的预测结果和标签值,由损失函数来计算loss

6.    优化器通过更新参数来最小化loss

7.    不断重复4-6直到迭代次数达到或者loss低于设定的阈值

使用TensorFlow来完成以上计算时,我们需要:

1)  使用静态图的方式表达上面的计算过程(对应阶段一)

2)  使用Session(会话)来驱动上面的计算(对应阶段二)

可以如下面代码所示,

所有我们想要进行的计算都需要在阶段一进行表达,如我们需要进行模型初始化这样一个计算过程,那么我们需要在阶段一构造一个init操作节点,我们需要最小化loss,更新模型参数,我们可以构造一个train_op操作节点,每个计算对应计算图中的一个计算节点,一旦计算图构建完成,我们就可以在阶段二过程通过运行这个节点来进行实际的计算如sess.run(init),sess.run(train_op)。由此通过阶段一阶段二两部分程序完成我们想要的计算逻辑,学习到的线性模型如下图所示。

正是因为TF这种graph和session两阶段的划分,导致我们在调试TF的时候也会分为两个阶段:

1.    错误发生在组装图部分。这里TF会进行类型检测,以及shape推理,所以一般dtype和shape相关的错误会与这一部分代码相关。

2.    错误发生在执行图部分。这里TF会进行运行时的计算,所以NaN等问题会发生在这个阶段。

如果想更多的了解如何使用TensorFlow构建机器学习模型,可以点击阅读原文,关注深度学习大讲堂推出的Tensorflow实战课程。

往期精彩回顾

【领域报告】主动学习年度进展|VALSE2018

可微编程:打开深度学习的黑盒子

白翔:复杂开放场景中的文本理解

【领域报告】图像OCR年度进展|www.yongshiyule178.com VALSE2018

【领域报告】行人再识别年度进展 |www.leyou2.net VALSE2018

“一叶知秋”:弱监督视觉语义分割|www.meiwanyule.cn  VALSE2018之九

“解疑释惑”:视觉世界中的结构化理解|www.hjha178.com/ VALSE2018之八

“提纲挈领”:视觉系统的紧凑性初探|VALSE2018之七

“删繁就简”:深度神经网络加速与压缩|VALSE2018之六

“看山是山”:脑启发的视觉计算|VALSE2018之五

转载于:https://www.cnblogs.com/qwangxiao/p/9190075.html

TensorFlow: 薛定谔的管道相关推荐

  1. CADD分子对接、薛定谔分子对接、AMBER分子动力学能量优化与分析、AIDD人工智能(机器学习与深度学习)药物发现

    分子动力学模拟是分子模拟中最接近实验条件的模拟方法,能够从原子层面给出体系的微观演变过程,直观的展示实验现象发生的机理与规律,促使我们的研究向着更高效.更经济.更有预见性的方向发展.分子动力学可以解决 ...

  2. 86年后,终于有人完成「真人版」薛定谔的猫实验,量子纠缠了活体动物

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:机器之心 首先要回答的问题:实验是量子的还是经典物理的? 你一定听说过薛定谔的猫 ...

  3. 薛定谔的猫跳进了生物学界,化学家表示:没有我可能办不到

    来源:原理 摘要:在生物科学界流传着"物理学家累了就来生物界玩一玩"的调侃.确实,现今学科之间密不可分,生物学的发展对特定物理技术的需求也越大.但是这样化学家却不满意了? 1943 ...

  4. 薛定谔的猫——.NET 4.1 中的新基类,开源Preview中

    前言: 昨天一如既往地登上forums.asp.net答帖子,却被上面的一条滚动新闻雷到了: .NET 4.1 Preview - New Base Class Library (BCL) Exten ...

  5. 违背常识、颠覆认知,终于有人把薛定谔的猫讲明白了

    导读:在20世纪30年代中期,新兴量子理论的某些奇怪之处变得明显起来,薛定谔进行了一个思想实验,即"薛定谔的猫".他试图表明,量子理论数学一定是缺了些什么.他认为"猫不能 ...

  6. [前端漫谈_4] 从 薛定谔的猫 聊到 Event loop

    前言 上次我们从高阶函数聊到了 promise ,这次我们聊聊: 从 promise A+ 规范和 promise 应用来看 promise 的特性 promise 和 eventloop 的关系 从 ...

  7. html打印代码_惊呆了,我的 Python 代码里面出现了薛定谔的 Bug

    IT服务圈儿 有温度.有态度的IT自媒体平台 本文经公众号:未闻Code(ID:itskingname) 授权转载 作者:kingname GNE: 新闻网页正文通用抽取器[1]更新了0.2.1版本, ...

  8. 当 Python 中混进一只薛定谔的猫……

    作者 | 豌豆花下猫 责编 | 胡巍巍 Python 是一门强大的动态语言,那动态体现在哪里,强大又体现在哪里呢? 除了好的方面,Python 的动态性是否还藏着一些使用陷阱呢,有没有办法识别与避免呢 ...

  9. 回答薛定谔问题: 生命是什么?自由能公式

    来源:CreateAMind 回答薛定谔的问题:自由能公式 麦克斯韦·詹姆斯·德索莫·拉姆斯泰德a,b,∗保罗·本杰明·巴德科克c,d,e, 卡尔·约翰·弗里斯顿f,1 加拿大魁北克蒙特利尔麦吉尔大学 ...

最新文章

  1. 源码里throw new RuntimeException(“Stub!“)什么意思
  2. Kendall Rank(肯德尔等级)相关系数
  3. android 资源引用 自定义标题栏
  4. qmoc文件_手动生成MOC文件
  5. ASP.NET2.0中配置文件的加密与解密
  6. qt登录界面跳转_每天10分钟,木辛老师带你实战慕课软件开发:登录界面开发第2课...
  7. c++ vector 初始化_什么?还不懂c++vector的用法,你凭什么勇气来的!
  8. 如何修改游戏服务器端的数据,如何修改网络游戏服务器数据
  9. Netty服务器无限循环给客户端发送数据
  10. 百度地图api vue集成模板收录
  11. 性能提升五十倍:消息队列延时聚合通知的重要性
  12. EasyUI treegrid 获取编辑状态中某字段的值 [getEditor方法获取不到editor]
  13. 记录自定义view的基本使用
  14. 【Feign请求头丢失问题】no suitable HttpMessageConverter found for response type
  15. performSelector一系列方法调用和延时调用导致的内存泄露
  16. AGU13-Save The Princess
  17. 响铃:互金信贷的明天,或是一场一站式金融服务的盛宴
  18. CentOS全版本 阿里云下载详细教程
  19. 关于ubuntu无法播放土豆视频的解决方法
  20. 计算机课程的教案模板,计算机教学设计模板.doc

热门文章

  1. 中文编程语言Z语言开源正式开源!!!
  2. IOS开发之Storyboard应用
  3. Powershell 批量替换文件
  4. (字符串)字符串中首先出现两次的字符
  5. WinCE EBOOT中的Boot Args与Driver Globals (转)
  6. “3D几何与视觉技术”全球在线研讨会第八期~识别3D中的物体和场景
  7. 平均每个员工2000万!苹果为啥买下这家刚成立3年的AI创业公司?
  8. Oracle PCTfree assm,Oracle 12C LMT ASSM 完美测试
  9. java的课程总结_Java课程总结
  10. 收藏 | 从头训练深度监督目标检测