【AI实战】快速掌握Tensorflow(一):基本操作

原创
2018/08/18 23:52
阅读数 2W

Tensorflow是Google开源的深度学习框架,来自于Google Brain研究项目,在Google第一代分布式机器学习框架DistBelief的基础上发展起来。Tensorflow于2015年11月在GitHub上开源,在2016年4月补充了分布式版本,最新版本为1.10,2018年下半年将发布Tensorflow 2.0预览版。Tensorflow目前仍处于快速开发迭代中,不断推出新功能和优化性能,现已成为当今世界上最受欢迎的开源机器学习框架,是学习研究AI的必备神器。

接下来,将推出“快速掌握Tensorflow”的系列文章,带你快速入门掌握Tensorflow。

1、Tensorflow是什么?
Tensorflow是当前最流行的深度学习框架,它既是一个实现深度学习算法的接口,也是执行深度学习算法的框架。Tensorflow前端支持Python、C++、Java、Go等语言,后端使用C++、CUDA等写成,可在众多系统上运行,包括Windows、Mac、Linux、Android、IOS等。
Tensorflow的官方网址为  http://www.tensorflow.org
Tensorflow的GitHub网址为 https://github.com/tensorflow/tensorflow

2、Tensorflow有什么特点?
Tensorflow最主要的特点是使用数据流图(data flow graphs)进行数值计算,由节点(Nodes)和边(Edges)组成,其中,节点(Nodes)表示数据操作,边(Edges)表示节点间相互通信的多维数组,这种在边与边之间流动(flow)的数据也被称为张量(tensor),故而得名Tensorflow。如下图所示:
Tensors Flowing

【注意】在深度学习里面,数据流图都是自下往上的,逐层递进,而平常普通流程图大多是自上往下呈现,刚开始看数据流图会可能有些不太习惯

Tensorflow不是一个严格的“神经网络”库,不只是用于深度学习,只要能将计算模型表示为数据流图形式,就可以使用Tensorflow进行计算。

3、安装Tensorflow
在【AI实战】系列文章中,已经介绍过了AI基础环境搭建:Ubuntu + Anaconda + Tensorflow + GPU + PyCharm,在此就不再赘述。详见文章:AI基础环境搭建
本系列文章的代码均基于Python 3.6和Tensorflow 1.10。

4、Hello World
程序员从“Hello World”开始。在安装好Tensorflow之后,写个Hello World试试安装是否成功。代码如下:

import tensorflow as tf
hello=tf.constant(‘Hello, TensorFlow!’)
sess=tf.Session()
print(sess.run(hello))

如果成功输出“Hello,TensorFlow!”,则表明TensorFlow安装成功。

从这个Hello World代码可以看出,
(1)要使用tensorflow,先要导入tensorflow库,使用import tensorflow导入,一般会简写为tf
(2)要执行tensorflow,先要创建Session(会话)。Session是用户使用tensorflow时的交互接口,用以创建计算图,然后通过Session的run方法执行计算图。

5、学会基本操作
TensorFlow的数据流图由节点(Nodes)和边(Edges)组成,下面从节点(操作)和边(张量)来介绍TensorFlow的基本操作。
(1)张量
张量是TensorFlow的主要数据结构,用于操作计算图。
一个张量(Tensor)可以简单地理解为任意维的数组,张量的秩表示其维度数量。张量的秩不同,名称也不相同。
a、标量:维度为0的Tensor,也就是一个实数
b、向量:维度为1的Tensor
c、矩阵:维度为2的Tensor
d、张量:维度达到及超过3的Tensor

创建张量有以下主要4种方法:
a、创建固定张量
创建常数张量:
constant_ts=tf.constant([1,2,3,4,5])


创建零张量:
zero_ts=tf.zeros([row_dim, col_dim])


创建单位张量:
ones_ts=tf.ones([row_dim,col_dim])


创建张量,并用常数填充:
filled_ts=tf.fill([row_dim,col_dim],123)

b、创建相似形状张量
创建相似的零张量:
zeros_like=tf.zeros_like(constant_ts)


创建相似的单位张量:
ones_like=tf.ones_like(constant_ts)

c、创建序列张量
指定起止范围
linear_ts=tf.linspace(start=0, stop=2, num=6)
结果返回[0.0,0.4,0.8,1.2,1.6,2.0],注意该结果包括stop值


指定增量
seq_ts=tf.range(start=4, limit=16, delta=4)
结果返回[4,8,12],注意该结果不包括stop值

d、随机张量
生成均匀分布的随机数
randunif_ts=tf.random_uniform([row_dim,col_dim],minval=0,maxval=1)
结果返回从minval(包含)到maxval(不包含)的均匀分布的随机数


生成正态分布的随机数
randnorm_ts=tf.random_normal([row_dim,col_dim],mean=0.0,stddev=1.0)
其中mean表示平均值,stddev表示标准差

(2)占位符和变量
占位符和变量是使用TensorFlow计算图的关键工具,两者是有区别的
a、变量:是TensorFlow算法中的参数,通过调整这些变量的状态来优化模型算法;
b、占位符:是TensorFlow对象,用于表示输入输出数据的格式,允许传入指定类型和形状的数据。

创建变量
通过tf.Variable()函数封装张量来创建变量,例如:
my_var=tf.Variable(tf.zeros([row_dim,col_dim]))

【注意】声明变量后需要进行初始化才能使用,最常使用以下函数一次性初始化所有变量,使用方式如下:
init_op=tf.global_variables_initializer()

创建占位符
占位符仅仅是声明数据位置,也即先占个位,后面在会话中通过feed_dict传入具体的数据。示例代码如下:

a=tf.placeholder(tf.float32,shape=[1,2])
b=tf.placeholder(tf.float32,shape=[1,2])
adder_node=a+b   #这里的“+”是tf.add(a,b)的简洁表达
print(sess.run(adder_node,feed_dict={a:[2,4],b:[5.2,8]}))

输出结果为[7.2 12]

(3)操作
TensorFlow张量的加、减、乘、除、取模的基本操作是:add()、sub()、mul()、div()、mod()。例如:

a=tf.placeholder(tf.float32,shape=[1,2])
b=tf.placeholder(tf.float32,shape=[1,2])
adder_node=tf.add(a,b)
print(sess.run(adder_node,feed_dict={a:[2,4],b:[5.2,8]}))

输出结果为[7.2 12]

其中,乘法、除法有比较特殊之处,如果是要对浮点数进行整除,则使用floordiv();如果是要计算两个张量间的点积,则使用cross()。
下面列出常用的数学函数列表:

通过以上的简单介绍,相信你已了解了TensorFlow的特点和基本的操作方式,接下来,我们将结合案例继续深入介绍TensorFlow,敬请期待!

 

欢迎关注本人的微信公众号“大数据与人工智能Lab”(BigdataAILab),获取更多信息

 

推荐相关阅读

展开阅读全文
打赏
3
25 收藏
分享
加载中
更多评论
打赏
0 评论
25 收藏
3
分享
返回顶部
顶部