目录

1、TensorFlow计算模型一一计算图

2、TensorFlow数据模型——张量

3、TensorFlow运行模型——会话


1、TensorFlow计算模型一一计算图

(1)计算图的概念
TensorFlow 的名字中己经说明了它最重要的两个概念一一TensorFlow。Tensor就是张量,张量可以被简单地理解为多维数组。Flow则体现了它的计算模型。Flow翻译成中文就是“流”,它直观地表达了张量之间通过计算相互转化的过程。TensorFlow中的每一个计算都是计算图上的一个节点,而节点之间的边描述了计算之间的依赖关系。

如下图所示,每一个节点都是一个运算,每一条边代表了计算之间的依赖关系。如果一个运算的输入依赖于另一个运算的输出,那么这阿玲哥运算有依赖关系。下图中,a和b两个常量不依赖任何其他计算,add计算则依赖读取两个常量的取值。所以在下图中就得到一条从a到add的边和从b到add的边。没有任何计算依赖add节点,所以add节点没有指向其他节点的边。TensorFlow的程序都可以通过类似下图所示的计算图形式来表示。

TensorBoard可视化向量相加的计算图

(2) 计算图的使用

TensorFlow 程序一般可以分为两个阶段。在第一个阶段需要定义计算图中所有的计算;第二个阶段为执行计算。

下边给出计算图中的定义阶段:

import tensorflow as tf
a= tf.constant([l.O, 2 .0], name=”a”)
b = tf.constant([2.0, 3.0], name=”b ”)
result = a + b

在Python中一般会采用“ impot tensorflow as tf”的形式来载入TensorFlow,这样可以使用“ tf”来代替“ tensorflow”作为模块名称,使得整个程序更加简洁。

在这个过程中,TensorFlow 会自动将定义的计算转化为计算图上的节点 。在TensorFlow程序中,系统会自动维护一个默认的计算图,通过 tf.get_default_graph 函数可以获取当前默认的计算图。

以下代码示意了如何获取默认计算图以及如何查看一个运算所属的计算图 :

# 通过a.graph可以查看张所属的计算图。因为没有特意指定,所以这个计算图应该等于
# 当前默认的计算图。所以下面这个操作输出值为True。
print(a.graph is tf.get_default_graph())

除了使用默认的计算图,TensorFlow支持通过tf.Graph函数来生成新的计算图。不同计算图上的张量和运算都不会共享。以下代码示意了如何在不同计算图上定义和使用变量:

import tensorflow as tf
gl = tf.Graph()
with gl.as_default () :# 在计算图g1中定义变量v,并初始化为0v = tf.get_variable(” v ”, initializer=tf.zeros_initializer(shape=[l)))g2 = tf.Graph()
with g2.as_default () :# 在计算图g2中定义变量v,并初始化为1v = tf.get_variable(” v ”, initializer=tf.ones_initializer(shape=[l)))# 在计算图g1中读取变量“v”的值
with tf.Session(graph = g1) as sess:tf.global_variables_initializer().run()with tf.variable_scope("", reuse = True):# 在计算图g1中,变量“v”的取值应该为0,所以下面这行输出为[0.]print(sess.run(tf.get_variable("v")))    # 在计算图g2中读取变量“v”的值
with tf.Session(graph = g2) as sess:tf.global_variables_initializer().run()with tf.variable_scope("", reuse = True):# 在计算图g2中,变量“v”的取值应该为1,所以下面这行输出为[1.]print(sess.run(tf.get_variable("v")))

以上代码产生了两个计算图,每个计算图中定义了一个名字为“v”的变量。在计算图g1中,将 v 初始化为 0 ;在计算图 g2 中,将 v 初始化为1 。可以看到当运行不同计算图时,变量 v 的值也是不一样的。


2、TensorFlow数据模型——张量

(1)张量的概念
在 TensorFlow程序中,所有的数据都通过张量的形式来表示,从功能的角度上看,张量可以被简单理解为多维数组。张量中并没有存储真正的数字,而是存储张量的结构。一个张量中主要保存了三个属性 : 名字( name )、维度( shape )和类型( type )
张量的第一个属性名字不仅是一个张量的唯一标识符,它同样也给出了这个张量是如何计算出来的。张量的命名可以通过 “node:src_output”的形式来给出。其中 node 为节点的名称src_output 表示当前张量来自节点的第几个输出(编号从0开始)
(2)张量的使用

张量使用主要可以总结为两大类:

(1)第一类用途是对中间计算结果的引用 。 当一个计算包含很多中间结果时,使用张量可以大大提高代码的可读性。以下为使用张量和不使用张量记录中间结果来完成向量相加的功能的代码对比 。

(2)第二类情况是当计算图构造完成之后,张量可以用来获得计算结果,也就是得到真实的数字。


3、TensorFlow运行模型——会话

TensorFlow中的会话(session)来执行定义好的运算。会话拥有并管理 TensorFlow 程序运行时的所有资源。所有计算完成之后需要关闭会话来帮助系统回收资源,否则就可能出现资源泄漏的问题。

TensorFlow中使用会话模式一般有两种:

(1)第一种模式需要明确调用会话生成函数和关闭会话函数,代码流程如下:

# 创建一个会话
sess = tf.Session()
# 使用这个创建好的会话来得到关心的运算的结果。
# 比如调用上述sess.run(result)得到result张量的取值
sess.run(...)
# 关闭会话使得本次运行中使用到的资源可以被释放
sess.close()

(2)第二种模式是通过Python的上下文管理器来使用会话,代码流程如下:

# 创建一个会话,并通过Python中的上下文管理器来管理这个会话
with tf.Session() as sess:# 使用创建好的会话来计算关心的结果sess.run(...)# 不需要再调用“Session.close()”函数来关闭会话# 当上下文退出时会话关闭和资源释放也自动完成

通过Python上下文管理器的机制,只要将所有的计算放在 “ with”的内部就可以 。当上下文管理器退出时候会自动释放所有资源。

TensorFlow入门:TensorFlow工作原理相关推荐

  1. Kubernetes入门——Kubernetes工作原理及使用

    作者简介: 星龙 百度基础架构部研发工程师 负责混部调度系统研发 本文基于百度云原生团队『云原生基础知识概述及实践』系列视频课程--『Kubernetes入门-Kubernetes工作原理』梳理. 视 ...

  2. Servlet快速入门和工作原理

    Servlet:  server applet     * 概念:运行在服务器端的小程序         * Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则.   ...

  3. 吴恩达深度学习课程-Course 2 改善深层神经网络 第三周 TensorFlow入门编程作业

    虽然申请书的ddl临近,但还是先写写编程作业- 编程作业的代码用的是tf1,而我的环境为tf2,所以 TensorFlow入门 TensorFlow教程 1 - 探索Tensorflow库 1.1 - ...

  4. 【TensorFlow系列一】TensorFlow工作原理

    ↑ 点击上方[计算机视觉联盟]关注我们 今天开始,小编会更新TensorFlow系列文章,包括TensorFlow的使用和TensorFlow实践的项目等. 本篇主要介绍TensorFlow的计算模型 ...

  5. Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习——计算机图形学世界中相机的工作原理

    Part1:使用 TensorFlow 和 Keras 的 NeRF计算机图形学和深度学习 1. 效果图 2. 原理 2.0 前向成像模型 2.1 世界坐标系 2.2 相机坐标系 2.3 坐标变换 2 ...

  6. tensorflow源码编译教程_极简入门TensorFlow C++源码

    前一段时间,一直在忙框架方面的工作,偶尔也会帮业务同学去优化优化使用TensorFlow的代码,也加上之前看了dmlc/relay,nnvm的代码,觉得蛮有意思,也想分别看下TensorFlow的Gr ...

  7. 世界最清楚tensorflow入门教程

    人工智能.机器学习和深度学习 在介绍TensorFlow(以下简称为TF)之前,我们首先了解一下相关背景. TF是一种机器学习框架,而机器学习经常和人工智能,深度学习联系在一起,那么三者到底是什么关系 ...

  8. 一文带你看懂!TensorFlow入门

    个人博客导航页(点击右侧链接即可打开个人博客):大牛带你入门技术栈 TensorFlow入门 本文将初步向码农和程序媛们介绍如何使用TensorFlow进行编程.在阅读之前请先 安装TensorFlo ...

  9. TensorFlow入门(五)多层 LSTM 通俗易懂版

    欢迎转载,但请务必注明原文出处及作者信息. @author: huangyongye @creat_date: 2017-03-09 前言: 根据我本人学习 TensorFlow 实现 LSTM 的经 ...

  10. tensorflow 入门

    基本使用 使用 TensorFlow, 你必须明白 TensorFlow: 使用图 (graph) 来表示计算任务. 在被称之为 会话 (Session) 的上下文 (context) 中执行图. 使 ...

最新文章

  1. 英文谚语:Take that with a grain of salt
  2. 分布式任务调度平台XXL-JOB本地配置可能遇到的问题和解决方案
  3. Atitit ftp原理与解决方案
  4. [P2387魔法森林
  5. Python学习笔记——glob模块【文件、路径操作】
  6. 汽车电子专业知识篇(二十)-深度解析CAN FD与传统CAN的差异
  7. STM32F1--FreeRTOS系统移植运行报错:L6218E:Undefined symbol xTaskGetSchedulerState (referred from delay.o)
  8. halcon学习笔记4-字符识别(包括汉字识别)
  9. Linux:面试常被问到的命令(持续更新)
  10. android wifi速度太慢,手机连上wifi之后速度比4G还慢?设置好DNS让你体验飞一般的感觉...
  11. C#实现触摸屏自定义键盘
  12. 【API调用】人脸检测+人脸属性(旷视 / 百度)
  13. beautifulsoup html内容_用python3教你任意Html主内容提取
  14. 分享新手电商(淘宝、拼多多、楚楚街)上货经验
  15. python中文朗读_python语音朗读
  16. 卡特兰数列(Catalan )
  17. ONLYOFFICE文档V7.2现已发布————插件市场、实时查看器、连写、全新表单字段、UI 更新等
  18. Vue Router 路由中 this.$router 与this.$route区别
  19. 【转载】ARPU ARPPU傻傻分不清楚?手游收入指标名词解释
  20. 工厂IP网络广播系统解决方案

热门文章

  1. windows2016+sqlserver2017集群搭建alwayson之搭建配置篇
  2. 鸿蒙安装elasticsearch7,安装操作系统_岁寒,然后知松柏之后凋也的技术博客_51CTO博客...
  3. 如何在计算机桌面上增添word,怎么在桌面添加Word文档
  4. 厦大计算机学硕分数,【图片】一战厦大计算机上岸,经验帖。慢更【考研吧】_百度贴吧...
  5. python comprehension_python list comprehension在一次迭代中产生两个值
  6. matlab怎么显示bfm模型的纹理模型,BFM模型介绍及可视化实现(C++)
  7. 谷歌android红米手机,小米多款谷歌Android One手机曝光:全是红米系列
  8. python开发实践教程 于京_《Python开发实践教程》于京、宋伟 著著【摘要 书评 在线阅读】-苏宁易购图书...
  9. 常用的sublime text 3插件
  10. memcached安装及.NET中的Memcached.ClientLibrary使用详解