Welcome to Tensorflow
“使用数据流程图进行数值计算的开放源码软件库”
一些使用TensorFlow的网络
Goals
- 理解TF的计算图方法
- 探索TF的内置函数和类
- 学会如何去构建适合一个深度学习项目的模型
Resources
Books
- Aurélien Géron’s Hands-On Machine Learning with Scikit-Learn and TensorFlow (O’Reilly, March 2017)
- François Chollet’s Deep Learning with Python (Manning Publications, November 2017)
- Nishant Shukla’s Machine Learning with TensorFlow (Manning Publications, January 2018)
- Lieder et al.’s Learning TensorFlow A Guide to Building Deep Learning Systems (O’Reilly, August 2017)
Graphs and Sessions
Data Flow Graphs
- TF将计算的定义和执行分离
- 步骤:
Phase1: assemble a graph
Phase2: use a session to execute operation in the graph
- What’s a tensor(张量)?
An n-dimensional array
0-d tensor: scalar (number)
1-d tensor: vector
2-d tensor: matrix
and so on - Nodes and Edges
Nodes: 运算符、变量、常量
Edges: tensors
- How to get the value of a?
创建一个会话,将其分配给变量sess,以便稍后调用,在会话中,计算图表以获取a的值:
我们一般用一下这种写法:
tf.Session()
- 会话对象封装了执行操作对象和计算张量对象的环境。
- Session还将分配内存来存储变量的当前值。
More graph
Subgraph
由于计算pow_op并不需要useless,所以session并不会计算、存储useless。
Session只会计算与fetches相关的部分。
parallel
可以将图形分割成几个块,并在多个cpu、gpu、TPUs或其他设备上并行运行它们(Example: AlexNet):
Distributed Computation
多个图?
- 多个图需要多个会话,默认情况下,每个图都会尝试使用所有可用资源
- 如果不通过python/numpy传递数据,就不能在它们之间传递数据,而python/numpy在分布式环境中不起作用
- 最好在一个图中有断开连接的子图
tf.Graph()
tensorflow不会混合默认graph和用户自己创建的graph:
上面这种做法容易出错,这样更好:
但是真的没有必要多个图!!!
为什么选择graph
- 节省计算。只运行指向要获取的值的子图。
- 许多常见的机器学习模型,如神经网络,已经被普遍地教授并被可视化为有向图,这使得它们的实现对机器学习实践者来说更加自然。
- 通过将计算分解成容易微分的小块,TF能够自动计算任意节点(或“操作”,它们在TensorFlow中被称为)相对于任何可能影响第一个节点输出的其他节点的导数。能够计算节点的导数/梯度,特别是输出节点,对于建立机器学习模型是至关重要的。
- 将计算分开,可以更容易地在多个cpu、gpu和其他计算设备之间分配工作。简单地将整个较大的图形分割成几个较小的图形,并将图形的每个部分分配给每个设备(使用逻辑协调跨设备共享信息)
作者:其实是个驴
参考:cs20课件