目录
1 tensorflow是什么
是一个采用数据流图(data flow graphs),用于数值计算的开源软件库,于2015年11月发布。
2 为什么选择tensorflow
2.1 灵活性和稳定性
最初由google开发,用来做机器学习的学术研究和产品开发的一个基础平台框架。
2.2 受欢迎程度
相对于现有的机器学习框架,比如Keras,Caffe,PyTorch,Torch,Theano等,在githup上的Stars和Repositories是最高的。许多公司,比如google,openai,intel,nvidia等都在使用tensorflow。同时,网上关于tensorflow的文档资料也是最全面的。
3 理解Graphs 和Sessions
3.1 数据流图(data flow graphs)
首先,我们定义一个graph图,然后,通过一个session去执行图中的操作(最新的eager model将不需要这样形式定义),如下图所示:
3.2 什么是tensor
简单说,tensor就是一个n维的array,在tensorflow里,不同的维度对应的形式如下:
- 0维度tensor: 对应一个scalar数量值(比如数字number)
- 1维度tensor:对应的是一个vector向量
- 2维度tensor:对应的是一个matrix矩阵
- …
import tensorflow as tf
a = tf.add(3,5)
如上做一个简单加法,则用tensorboad可视化图形如下:
当你没有明确给出节点的name的时候,tensorflow会自动给节点一个名字,所以上图对应的是: x = 3 , y = 5 x=3, y=5 x=3,y=5
图的节点Nodes类型有三种:
- 操作operators
- 变量variables
- 常量constants
Edges边只代表一种:
- tensors
最终图形式如下:
所以这也为什么取名为tensorflow了,因为: - tensors 是data
- tensorflow = tensor + flow = data + flow
接下来,我们怎么得到上面的相加的 a a a的值呢?
创建一个session,session会计算图中所有指向节点a的节点,如下图所示:
计算代码如下:
import tensorflow as tf
a = tf.add(3,5)
with tf.Session() as sess:
print(sess.run(a))
3.3 tf.Session()
一个session object用来封装环境,在这个环境里,执行operation object,计算tensor object。session同时也会为当前的变量值分配内存资源。在图中定义的各种operations,当我们run的时候,对应的值所涉及的operation才会操作,没有涉及的operation,session不会进行计算。如下图所示:
计算代码如下:
x = 2
y = 3
add_op = tf.add(x,y)
mul_op = tf.multiply(x, y)
useless = tf.multiply(x, add_op)
pow_op = tf.pow(add_op, mul_op)
with tf.Session() as sess:
z = sess.run(pow_op)
如果我们只想要pow_op的值,则session不会计算useless的值。
如果需要pow_op的值,只需要fetch 一系列的tensors就可,只需在最后一行改下:
z, not_useless = sess.run([pow_op, useless])
3.4 为什么选择graphs
- 节省计算开销,只需要执行你想要获取的值的operations,无关的operations不需要计算
- 自动微分更灵活,将计算拆分成一块块小的不同的部分,可以更加灵活的进行自动微分计算
- 分布式计算,可以将work分布在多CPU,GPU或者TPU进行计算
- 图结构模型,许多常见的机器学习模型都视作有方向的图graphs