目录

  • 1.介绍
  • 2.导入
  • 3.The Computational Graph
  • 4.TensorBoard
  • 5.张量(Tensor)
  • 6.数据流图(Dataflow Graph)
  • 7.Sesssion
  • 8.构建计算图

1.介绍

TensorFlow提供很多API,最低级别是API:TensorFlow Core,提供给你完成程序控制,还有一些高级别的API,它们是构建在
TensorFlow Core之上的,这些高级别的API更加容易学习和使用,于此同时,这些高级别的API使得重复的训练任务更加容易,
也使得多个使用者操作对他保持一致性,一个高级别的API像tf.estimator帮助你管理数据集合,估量,训练和推理。
TensorsTensorFlow的数据中央控制单元是tensor(张量),一个tensor由一系列的原始值组成,这些值被形成一个任意维数的数组。
一个tensor的列就是它的维度。

2.导入

import tensorflow as tf

上面的是TensorFlow 程序典型的导入语句,作用是:赋予Python访问TensorFlow类(classes),方法(methods),符号(symbols)

3.The Computational Graph

TensorFlow核心程序由2个独立部分组成:
a:Building the computational graph构建计算图
b:Running the computational graph运行计算图
一个computational graph(计算图)是一系列的TensorFlow操作排列成一个节点图。

node1 = tf.constant(3.0, dtype=tf.float32)
node2 = tf.constant(4.0)# also tf.float32 implicitly
print(node1, node2)

最后打印结果是:

要想打印最终结果,我们必须用到session:一个session封装了TensorFlow运行时的控制和状态

sess = tf.Session()
print(sess.run([node1, node2]))


我们可以组合Tensor节点操作(操作仍然是一个节点)来构造更加复杂的计算,
node3 = tf.add(node1, node2)
print(“node3:”, node3)
print(“sess.run(node3):”, sess.run(node3))
打印结果是:、

node3:Tensor("Add:0", shape=(), dtype=float32)
sess.run(node3):7.0

4.TensorBoard

TensorFlow提供一个统一的调用称之为TensorBoard,它能展示一个计算图的图片;如下面这个截图就展示了这个计算图

5.张量(Tensor)

TensorFlow 内部的计算都是基于张量的,因此我们有必要先对张量有个认识。张量是在我们熟悉的标量、向量之上定义的,详细的定义比较复杂,我们可以先简单的将它理解为一个多维数组:

3                                       # 这个 0 阶张量就是标量,shape=[]
[1., 2., 3.]                            # 这个 1 阶张量就是向量,shape=[3]
[[1., 2., 3.], [4., 5., 6.]]            # 这个 2 阶张量就是二维数组,shape=[2, 3]
[[[1., 2., 3.]], [[7., 8., 9.]]]        # 这个 3 阶张量就是三维数组,shape=[2, 1, 3]

TensorFlow 内部使用tf.Tensor类的实例来表示张量,每个 tf.Tensor有两个属性:

dtype Tensor 存储的数据的类型,可以为tf.float32、tf.int32、tf.string…
shape Tensor 存储的多维数组中每个维度的数组中元素的个数,如上面例子中的shape
我们现在可以敲几行代码看一下 Tensor 。在命令终端输入 python 或者 python3 启动一个 Python 会话,然后输入下面的代码

# 引入 tensorflow 模块
import tensorflow as tf# 创建一个整型常量,即 0 阶 Tensor
t0 = tf.constant(3, dtype=tf.int32)# 创建一个浮点数的一维数组,即 1 阶 Tensor
t1 = tf.constant([3., 4.1, 5.2], dtype=tf.float32)# 创建一个字符串的2x2数组,即 2 阶 Tensor
t2 = tf.constant([['Apple', 'Orange'], ['Potato', 'Tomato']], dtype=tf.string)# 创建一个 2x3x1 数组,即 3 阶张量,数据类型默认为整型
t3 = tf.constant([[[5], [6], [7]], [[4], [3], [2]]])# 打印上面创建的几个 Tensor
print(t0)
print(t1)
print(t2)
print(t3)

上面代码的输出为,注意shape的类型:

>>> print(t0)
Tensor("Const:0", shape=(), dtype=int32)
>>> print(t1)
Tensor("Const_1:0", shape=(3,), dtype=float32)
>>> print(t2)
Tensor("Const_2:0", shape=(2, 2), dtype=string)
>>> print(t3)
Tensor("Const_3:0", shape=(2, 3, 1), dtype=int32)

print 一个 Tensor 只能打印出它的属性定义,并不能打印出它的值,要想查看一个 Tensor 中的值还需要经过Session 运行一下:

>>> sess = tf.Session()
>>> print(sess.run(t0))
3
>>> print(sess.run(t1))
[ 3.          4.0999999   5.19999981]
>>> print(sess.run(t2))
[[b'Apple' b'Orange'][b'Potato' b'Tomato']]
>>> print(sess.run(t3))
[[[5][6][7]][[4][3][2]]]
>>>

6.数据流图(Dataflow Graph)

数据流是一种常用的并行计算编程模型,数据流图是由节点(nodes)和线(edges)构成的有向图:

节点(nodes) 表示计算单元,也可以是输入的起点或者输出的终点
线(edges) 表示节点之间的输入/输出关系
在 TensorFlow 中,每个节点都是用 tf.Tensor的实例来表示的,即每个节点的输入、输出都是Tensor,如下图中 Tensor 在 Graph 中的流动,形象的展示 TensorFlow 名字的由来

TensorFlow 中的数据流图有以下几个优点:

可并行 计算节点之间有明确的线进行连接,系统可以很容易的判断出哪些计算操作可以并行执行
可分发 图中的各个节点可以分布在不同的计算单元(CPU、 GPU、 TPU等)或者不同的机器中,每个节点产生的数据可以通过明确的线发送的下一个节点中
可优化 TensorFlow 中的 XLA 编译器可以根据数据流图进行代码优化,加快运行速度
可移植 数据流图的信息可以不依赖代码进行保存,如使用Python创建的图,经过保存后可以在C++或Java中使用

7.Sesssion

我们在Python中需要做一些计算操作时一般会使用NumPy,NumPy在做矩阵操作等复杂的计算的时候会使用其他语言(C/C++)来实现这些计算逻辑,来保证计算的高效性。但是频繁的在多个编程语言间切换也会有一定的耗时,如果只是单机操作这些耗时可能会忽略不计,但是如果在分布式并行计算中,计算操作可能分布在不同的CPU、GPU甚至不同的机器中,这些耗时可能会比较严重。
TensorFlow 底层是使用C++实现,这样可以保证计算效率,并使用 tf.Session类来连接客户端程序与C++运行时。上层的Python、Java等代码用来设计、定义模型,构建的Graph,最后通过tf.Session.run()方法传递给底层执行。

8.构建计算图

上面介绍的是 TensorFlow 和 Graph 的概念,下面介绍怎么用 Tensor 构建 Graph。
Tensor 即可以表示输入、输出的端点,还可以表示计算单元,如下的代码创建了对两个 Tensor 执行 + 操作的 Tensor:

import tensorflow as tf
# 创建两个常量节点
node1 = tf.constant(3.2)
node2 = tf.constant(4.8)
# 创建一个 adder 节点,对上面两个节点执行 + 操作
adder = node1 + node2
# 打印一下 adder 节点
print(adder)
# 打印 adder 运行后的结果
sess = tf.Session()
print(sess.run(adder))

上面print的输出为:

Tensor("add:0", shape=(), dtype=float32)
8.0

上面使用tf.constant()创建的 Tensor 都是常量,一旦创建后其中的值就不能改变了。有时我们还会需要从外部输入数据,这时可以用tf.placeholder 创建占位 Tensor,占位 Tensor 的值可以在运行的时候输入。如下就是创建占位 Tensor 的例子:

import tensorflow as tf
# 创建两个占位 Tensor 节点
a = tf.placeholder(tf.float32)
b = tf.placeholder(tf.float32)
# 创建一个 adder 节点,对上面两个节点执行 + 操作
adder_node = a + b
# 打印三个节点
print(a)
print(b)
print(adder)
# 运行一下,后面的 dict 参数是为占位 Tensor 提供输入数据
sess = tf.Session()
print(sess.run(adder, {a: 3, b: 4.5}))
print(sess.run(adder, {a: [1, 3], b: [2, 4]}))

上面代码的输出为:

Tensor("Placeholder:0", dtype=float32)
Tensor("Placeholder_1:0", dtype=float32)
Tensor("add:0", dtype=float32)
7.5
[ 3.  7.]

我们还可以添加其他操作构建复杂的 Graph

# 添加×操作
add_and_triple = adder * 3.
print(sess.run(add_and_triple, {a: 3, b: 4.5}))

上面的输出为

22.5

Tensorflow【实战Google深度学习框架】—完整的TensorFlow入门教程相关推荐

  1. 《Tensorflow 实战google深度学习框架》第二版源代码

    <<Tensorflow 实战google深度学习框架–第二版>> 完整资料github地址: https://github.com/caicloud/tensorflow-t ...

  2. 06.图像识别与卷积神经网络------《Tensorflow实战Google深度学习框架》笔记

    一.图像识别问题简介及经典数据集 图像识别问题希望借助计算机程序来处理.分析和理解图片中的内容,使得计算机可以从图片中自动识别各种不同模式的目标和对象.图像识别问题作为人工智能的一个重要领域,在最近几 ...

  3. (转)Tensorflow 实战Google深度学习框架 读书笔记

    本文大致脉络: 读书笔记的自我说明 对读书笔记的摘要 具体章节的摘要: 第一章 深度学习简介 第二章 TensorFlow环境搭建 第三章 TensorFlow入门 第四章 深层神经网络 第五章 MN ...

  4. 免费教材丨第55期:Python机器学习实践指南、Tensorflow 实战Google深度学习框架

    小编说  时间过的好快啊,小伙伴们是不是都快进入寒假啦?但是学习可不要落下哦!  本期教材  本期为大家发放的教材为:<Python机器学习实践指南>.<Tensorflow 实战G ...

  5. 学习《TensorFlow实战Google深度学习框架 (第2版) 》中文PDF和代码

    TensorFlow是谷歌2015年开源的主流深度学习框架,目前已得到广泛应用.<TensorFlow:实战Google深度学习框架(第2版)>为TensorFlow入门参考书,帮助快速. ...

  6. 说说TensorFlow实战Google深度学习框架

    说说TensorFlow实战Google深度学习框架 事情是这样的,博主买了这本书,但是碍于想在电脑上边看边码,想找找PDF版本,然后各种百度,Google,百度网盘,最后找到的都是很多200M的,百 ...

  7. TensorFlow实战Google深度学习框架

    TensorFlow是谷歌2015年开源的主流深度学习框架.科技届的聚光灯已经从"互联网+"转到了"AI+": 掌握深度学习需要较强的理论功底,用好Tensor ...

  8. TensorFlow实战Google深度学习框架5-7章学习笔记

    目录 第5章 MNIST数字识别问题 第6章 图像识别与卷积神经网络 第7章 图像数据处理 第5章 MNIST数字识别问题 MNIST是一个非常有名的手写体数字识别数据集,在很多资料中,这个数据集都会 ...

  9. Tensorflow【实战Google深度学习框架】基于tensorflow + Vgg16进行图像分类识别

    文章目录 1.VGG-16介绍 2. 文件组成 - vgg16.py文件代码: 运行,测试 参考 1.VGG-16介绍 vgg是在Very Deep Convolutional Networks fo ...

  10. Tensorflow【实战Google深度学习框架】—使用 TensorFlow 实现模型

    文章目录 1.建立模型(Model) 2.使用 TensorFlow 实现模型 3.使用 TensorFlow 训练模型 1.建立模型(Model) 如下为我们进行某项实验获得的一些实验数据: 我们将 ...

最新文章

  1. python查看函数调用栈
  2. [网络]_获取内外网IP地址【Auto.js】
  3. 分羊(区间dp:分治与决策单调性优化)
  4. C++模板的一些基础知识
  5. 遗传算法入门到掌握(二)
  6. 646. Maximum Length of Pair Chain 最长的链条长度
  7. 数字图像识别笔记(第一章绪论)
  8. Linux(ubuntu)下切换root用户
  9. pytorch 入门学习 实现线性回归-5
  10. 运维,你是选择25k的996还是18k的八小时工作日?
  11. java茌首字母_汉字获取拼音首字母(1)
  12. 广告召回率是什么意思_推荐策略中的“召回”
  13. 一周内,在闲鱼上被疯狂转了2万次的Redis资料!!!
  14. 搭建SPA项目SPA项目中使用路由嵌套路由
  15. win10子系统ubuntu16.04安装HOS-NWT全过程
  16. Zabbix 通过shell脚本监控PostgreSQL
  17. python宏观经济研究应用_宏观经济学研究通常用什么软件?
  18. 金蝶EAS管理控制台一闪而过
  19. 互联网公司的期权激励和期权估值问题
  20. 周末读书:《红楼梦》

热门文章

  1. PaddleHub 视频人脸检测
  2. unable to get repr for class ‘torch.tensor‘
  3. python RuntimeError: maximum recursion depth exceeded
  4. python wing 免费下载安装
  5. VS2015静态编译libcurl(C++ curl封装类)
  6. ubuntu 解压rar报错
  7. 软件系统维护是一项不吸引人的工作_测试人员必须了解的软件测试工作规范
  8. Java集合面试题?看这篇就够了!
  9. Tomcat开启SSL协议支持
  10. IE浏览器兼容性调整总结技巧