TensorFlow编程结构
TensorFlow 与其他编程语言非常不同。
首先通过将程序分为两个独立的部分,构建任何拟创建神经网络的蓝图,包括计算图的定义及其执行。起初这对于传统程序员来说看起来很麻烦,但是正是图定义和执行的分开设计让 TensorFlow 能够多平台工作以及并行执行,TensorFlow 也因此更加强大。
计算图:是包含节点和边的网络。本节定义所有要使用的数据,也就是张量(tensor)对象(常量、变量和占位符),同时定义要执行的所有计算,即算子操作对象(Operation Object,简称 OP)。
每个节点可以有零个或多个输入,但只有一个输出。网络中的节点表示对象(张量和算子操作),边表示算子操作之间流动的张量。计算图定义神经网络的蓝图,但其中的张量还没有相关的数值。

为了构建计算图,需要定义所有要执行的常量、变量和算子操作。常量、变量和占位符将数学算子操作将在矩阵算子章节中详细讨论。
用一个简单的例子描述程序结构——通过定义并执行计算图来实现两个向量相加。
计算图的执行:使用会话对象来实现计算图的执行。会话对象封装了评估张量和操作对象的环境。这里真正实现了算子操作并将信息从网络的一层传递到另外一层。不同张量对象的值仅在会话对象中被初始化、访问和保存。在此之前张量对象只被抽象定义,在会话中才被赋予实际的意义。

具体做法
通过以下步骤定义一个计算图:

  1. 在此以两个向量相加为例给出计算图。假设有两个向量 v_1 和 v_2 将作为输入提供给 Add 操作。建立的计算图如下:

  2. 定义该图的相应代码如下所示:

  3. 然后在会话中执行这个图:

  4. 以上两行相当于下面的代码。上面的代码的优点是不必显式写出关闭会话的命令:

  5. 运行结果是显示两个向量的和:
    {3 3 8 7}
    请记住,每个会话都需要使用 close() 来明确关闭,而 with 格式可以在运行结束时隐式关闭会话。
    解读分析
    计算图的构建非常简单。添加变量和操作,并按照逐层建立神经网络的顺序传递它们(让张量流动)。TensorFlow 还允许使用 with tf.device() 命令来使用具有不同计算图形对象的特定设备(CPU/GPU)。在例子中,计算图由三个节点组成, v_1 和 v_2 表示这两个向量,Add 是要对它们执行的操作。
    接下来,为了使这个图生效,首先需要使用 tf.Session() 定义一个会话对象 sess。然后使用 Session 类中定义的 run 方法运行它,如下所示:
    run(fetches,feed_dict=None,options=None,run_metadata)
    算子结果的值在 fetches 中提取;在示例中,提取的张量为 v_add。run 方法将导致在每次执行该计算图的时候,都将对与 v_add 相关的张量和操作进行赋值。如果抽取的不是 v_add 而是 v_1,那么最后给出的是向量 v_1 的运行结果:
    {1,2,3,4}
    此外,一次可以提取一个或多个张量或操作对象,例如,如果结果抽取的是 [v_1…v_add],那么输出如下:
    {array([1,2,3,4]),array([2,1,5,3]),array([3,3,8,7])}
    在同一段代码中,可以有多个会话对象。
    拓展阅读
    为什么必须编写这么多行的代码来完成一个简单的向量加,或者显示一条简单的消息。其实你可以利用下面这一行代码非常方便地完成这个工作:
    print(tf.Session().run(tf.add(tf.constant([1,2,3,4]),tf.constant([2,1,5,3]))))
    编写这种类型的代码不仅影响计算图的表达,而且当在 for 循环中重复执行相同的操作(OP)时,可能会导致占用大量内存。养成显式定义所有张量和操作对象的习惯,不仅可使代码更具可读性,还可以帮助你以更清晰的方式可视化计算图。

注意,使用 TensorBoard 可视化图形是 TensorFlow 最有用的功能之一,特别是在构建复杂的神经网络时。构建的计算图可以在图形对象的帮助菜单下进行查看。
使用 Jupyter Notebook 或者 Python shell 进行编程,使用 tf.InteractiveSession 将比 tf.Session 更方便。InteractiveSession 使自己成为默认会话,因此你可以使用 eval() 直接调用运行张量对象而不用显式调用会话。下面给出一个例子

TensorFlow编程结构相关推荐

  1. 嵌入式C程序基础与编程结构

    嵌入式C程序基础与编程结构 Basics of Embedded C Program and Programming Structure 嵌入式C编程是处理器在我们日常生活中遇到的每一个嵌入式系统(如 ...

  2. tensorflow编程入门笔记之一

    基本上每一个语言或者工具都有自己的"hello world" demo,那么学习它们一般都会从这个"hello world"开始.今天我们就来看看tensorf ...

  3. (Python+Tensorflow)编程踩坑集锦

    (Python+Tensorflow)编程踩坑集锦 1 开发环境安装 推荐视频:https://www.icourse163.org/learn/PKU-1002536002?tid=14529374 ...

  4. 机器学习速成课程 | 练习 | Google Development——编程练习:TensorFlow 编程概念

    TensorFlow 编程概念 学习目标: 学习 TensorFlow 编程模型的基础知识,重点了解以下概念: 张量 指令 图 会话 构建一个简单的 TensorFlow 程序,使用该程序绘制一个默认 ...

  5. 第二章16位和32位微处理器(1)——8086的编程结构与最小模式

    微处理器的性能指标 (1)字长:CPU一次能够处理的二进制位数 (2)主频:代表CPU的运算速度 (3)核心数:指物理上,也就是硬件上存在着几个核心.比如,双核就是包括2个相对独立的CPU核心单元组, ...

  6. tensorflow+入门笔记︱基本张量tensor理解与tensorflow运行结构与相关报错

    欢迎登陆官网(附https://tensorflow.google.cn/)了解更多 TensorFlow 内容,也可关注 TensorFlow 官方公众号获取更多资讯. Gokula Krishna ...

  7. Core Java For The Impatient-阅读笔记1.基本的编程结构

    Core Java For The Impatient 1.基本的编程结构 1.Key Points 在Java,所有的方法必须在类声明.非静态方法只能在所属类的对象上调用. 静态方法不是通过对象调用 ...

  8. 《core Java for the impatient》阅读笔记(1) 基本编程结构

    第一章 基本的编程结构 System类中声明了一个常量 public static final PrintStream out 可以在任何地方使用System.out 这是少有的几个常量没有大写的情况 ...

  9. TensorFlow编程基础题库推荐

    TensorFlow表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性.TensorFlow,简单看就是Tensor和Flow,即意味着Tensor和Flow是Tenso ...

最新文章

  1. 快手日入数据量超 5120TB,数据管治如何做?
  2. 鼠标坏了你别扔,可以修的
  3. html和css入门 (三)
  4. linux shell中各种分号和括号,linux shell 各种分号,括号使用方法总结
  5. PostgreSQL用户角色和权限管理
  6. C#算法练习,求e,求π
  7. 美团员工被指用钓鱼邮件获拼多多薪资;华为回应暂无其它手机厂商接入HarmonyOS;GCC 放弃版权转让政策...
  8. jet-cp4005,linux双面打印,如何使用Linux(Ubuntu 13.04)在HP 7610上启用双面打印
  9. linux ipk,openwrt下ipk生成过程及原理
  10. oracle性质是渐进正态性,基于惩罚函数的回归量变选择方法.doc
  11. 8086/8088CPU内部结构
  12. 手机app通用模板蓝色系用户登录页面
  13. AD(十九)class、设计参数、规则的创建
  14. 电视机顶盒CM311-1A-YST基于openwrt搭建pptpipsec服务器
  15. 宏碁 AN515-51支持nvme固态接口
  16. 传奇服务器运行内存占用很高,电脑内存占用一直很高,怎么回事? 电脑内存占用率过高的原因和解决方法...
  17. Linux-逻辑卷LVM
  18. 将若干字符串按照字母顺序输出
  19. Feburary——1052.爱生气的书店老板
  20. MATLAB文件操作

热门文章

  1. 2022-2028年中国网络直播行业深度调研及投资前景预测报告
  2. 2022-2028年中国丁晴橡胶行业市场深度分析及投资规划分析报告
  3. python学习之pip常用命令
  4. 【Sql Server】DateBase-连接查询
  5. bert推理速度太慢如何解决
  6. 关于pytorch--embedding的问题
  7. 自动编码器的评级预测
  8. CVPR 2020几篇论文内容点评:目标检测跟踪,人脸表情识别,姿态估计,实例分割等
  9. Redis安装与卸载
  10. react控制 input 框回车之后内容清空