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

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

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

一、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/tensorflowpython

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

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

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

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

四、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方法执行计算图。微信

五、学会基本操做
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),获取更多信息

 

推荐相关阅读