《TensorfFlow实战》读书笔记(一) —— Tensorflow 基础
记录
概述,要点,代码,思维导图
书籍信息
书名:《Tensorflow实战》
作者:黄文坚 唐源
出版社出版:电子工业出版社
ISBN:978-7-121-30912-0
1.1
Tensorflow 概要
TensorFlow 的官方网址:
www.tensorflow.org
Github 网址:
github.com/tensorflow/tensorflow
模型仓库地址:
github.com/tensorflow/models
Tensorflow 的一般架构:
TensorFlow 主要特性:
编程模型 | Dataflow-like model (数据流模型) |
---|---|
语言 | Python、C++、Go、Rust、Haskell、Java(还有非官方的 Julia、JavaScript、R 的支持) |
部署 | Code once, run everywhere(一次编写, 各处运行) |
计算资源 | CPU(Linux、Mac、Windows、Android、iOS) GPU(Linux、Mac、Windows) TPU(Tensor Processing Unit,张量计算单元, 主要用作推断) |
实现方式 | Local Implementation(单机实现) Distributed Implementation(分布式实现) |
平台支持 | Google Cloud Platform(谷歌云平台) Hadoop File System(Hadoop 分布式文件系统) |
数学表达 | Math Graph Expression(数学计算图表达) Auto Differentiation(自动微分) |
优化 | Common Subexpression Elimination (共同子图消除) Asynchronous Kernel Optimization(异步核优化) Communication Optimization(通信优化) Model Parallelism(模型并行)Data Parallelism(数据并行)Pipeline(流水线) |
1.2
Tensorflow 编程模型简介
1.2.1 核心概念
- TensorFlow 的计算表示为计算图(computation graph), 其中每一种运算操作(operation)作为一个节点(node),节点与节点之间连接为边(edge)。
- 计算图中每个节点可以有任意个输入和输出, 每一个节点描述一种运算操作,可以算是运算操作的实例化(instance)。
- 计算图的边中流动(flow)的数据称为张量(tensor),tensor 的数据类型可以定义和推断得到。
-
有一类特殊的边中没有数据流动(依赖控制
control dependencies
)作用是让起始节点执行后再执行目标节点,灵活进行条件控制。 -
python示例
import tensorflow as tf
b = tf.Variable(tf.zeros([100])) #生成 100 维的向量,初始化为 0
W = tf.Variable(tf.random_uniform([784,100],-1,1)) #生成784X100 的随机矩阵
x = tf.placeholder(name="x") # 输入的 Placeholder
relu = tf.nn.relu(tf.matmul(W,x)+b) #ReLU(Wx+b)
C = [...] # 根据 ReLU 函数的结果计算 Cost
s = tf.Session()
for step in range(0,10):
input = ...construct 100-D input array... # 为输入创建一个 100 维的向量
result = s.ruu(C, feed_dict={x: input}) # 获得 Cost,供给输入 x
print(step, result)
TensorFlow 内建的运算操作:
类型 | 示例 |
---|---|
标量运算 | Add、Sub、Mul、Div、Exp、Log、Greater、Less、Equal |
向量运算 | Concat、Slice、Split、Constant、Rank、Shape、Shuffle |
矩阵运算 | MatMul、MatrixInverse、MatrixDeterminant |
带状态的运算 | Variable、Assign、AssignAdd |
神经网络组件 | SoftMax、Sigmoid、ReLU、Convolution2D、MaxPooling |
存储、恢复 | Save、Restore |
队列及同步运算 | Enqueue、Dequeue、MutexAcquire、MutexRelease |
控制流 | Merge、Switch、Enter、Leave、NextIteration |
1.2.2 实现原理
TensorFlow 单机版本和分布式版本的示例图:
TensorFlow CPU 与 GPU 的通信过程:
1.23 拓展功能
1.TensorFlow 的自动求导示例:
2.TensorFlow 支持单独执行子图
3. TensorFlow 支持计算图的控制流,比如 if-condition 和 while-loop。
4. TensorFlow 提供 Switch 和 Merge 两种 operator,可以根据某个布尔值跳过某段子图, 然后把两段子图的结果合并, 实现 if-else 的功能
5. TensorFlow 的数据输入通过 input node 让用户直接输入文件系统的路径。
6. 队列可以让计算图的不同节点异步地执行。
7. 容器是 TensorFlow 中一种特殊的管理长期变量的机制,甚至可以允许不同计算图的不同Seesion 之间共享一些状态值。
1.24 性能优化
数据并行:
模型并行:
流水线并行: