tensorflow概述

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

猜你喜欢

转载自blog.csdn.net/BGoodHabit/article/details/108723842