TensorFlow是一个深度学习的框架工具。它是一个工具,使用它,我们可以更好的进行深度学习的程序设计。TensorFlow是Google开发的用于研究超大规模的深度学习神经网络,对深度学习的各种算法都提供了比较友好的支撑(可以在TensorFlow中直接使用此类算法,而不需要用户重新再写这些算法),可以用于语音识别或者图像识别等领域。可以说,TensorFlow是谷歌公司给我们提供了一套做菜的程式和工具,在此基础上,我们可以结合自己的需要作出想要的美食。更多的TensorFlow信息可以参考官方网址 https://www.tensorflow.org/和 http://www.tensorfly.cn/。
前面我们说到TensorFlow是一个框架,是一个工具。既然是工具,那么对工具的使用是有套路可寻的,或者说有使用说明书来告诉我们怎么用好这个工具。下面来学习一下TensorFlow的说明书。
我们知道,TensorFlow是用于深度学习神经网络的,而神经网络的学习需要大量的计算。在TensorFlow中,计算过程是一个计算图,与流程图类似。每一个运算操作是一个节点,每个节点可以有任意输入和输出,在网络形式上,是非常接近神经网络的样子。Tensor是张量的意思,是在计算图的边上流动的数据。
TensorFlow的的计算过程主要有三部。
import tensorflow as tf
a=tf.constant([1,2,3],name='a')
b=tf.constant([2,5,8],name='b')
result=a+b
print(result)
在这里,我们构建了一个加法的运算图。其中a和b是张量,result也是张量。这里仅仅是构建了图,并不执行实际运算。就像我们在做饭时候,厨房里有辣椒(如a)和鸡块(如b),同时也知道了炒菜的方法(如辣子鸡,如+),同时摆好了餐盘(result),但是我们还没有做成辣子鸡,我们仅仅是摆好了阵势,但是并没有开始炒。
with tf.Session as sess:
pass
接着做菜的例子说,做菜小能手就要撸撸袖子开始干了。实际开始做的时候,那么我们认为小能手占据了厨房,是一个session。
3. 运行计算
有了原材料,有了环境,之后就真刀实枪的开始干了,到了出结果的时候了。这里用sess.run(result)
,来表示开始运行(炒菜并装盘。)
因此,通过三步走完成了TensorFlow的实际使用。完整的代码如下:
import tensorflow as tf
a=tf.constant([1,2,3],name='a')
b=tf.constant([2,5,8],name='b')
result=a+b
with tf.Session() as sess:
print(sess.run(result))
运算结果是
[ 3 7 11]
如果说计算图示TensorFlow的计算模型,那么张量Tensor则是数据模型,张量是TensorFlow管理数据的形式。在TensorFlow中,所有的数据都可以通过张量的形式来表示。
张量可以理解成不同维度的数组。零阶张量是标量,也就是一个数;一阶张量是向量;二阶张量是矩阵;以此类推。需要注意的是张量保存的是数据的属性,而不是数值。张量具有三个属性:1,操作。2,维度。3,数据类型。其中操作和计算图的节点有关系。维度就是张量的维数。数据类型是张量对应的数据类型。
TensorFlow系统结构分为前端和后端。前端负责提供编程模型,构建计算图。后端提供运行环境,负责执行计算同,同时支持分布式计算。
在实际操作中,正如前面所说,有三个步骤,1、构建计算图,通过构建张量和运算节点来实现,并进行数据初始化。2、定义会话。3、计算图运行。
网上有很多关于TensorFlow的安装文章和资料,这里不再赘述。下面通过几个简单的例子看看看如何使用TensorFlow,在看实例之前,我们需要牢记TensorFlow操作的三个步骤,即建图赋值,定义会话,计算图运行。
import tensorflow as tf
A = tf.ones([2,3])
B = tf.Variable(tf.random_normal([2, 3], stddev=0.35),name="B")
第二步定义会话,其中,变量需要赋值,所有的运算操作都在Session中进行run。
第三步计算图运行。
因此代码如下:
A=tf.ones([2,3])
B = tf.Variable(tf.random_normal([2, 3], stddev=0.35),name="B")
result=A+B
with tf.Session() as sess:
print('**************')
print(sess.run(B.initializer)) #初始化B
print('----------------------')
print(sess.run(result))
另外可以使用initialize_all_variables()函数来初始化所有变量,就不需要对变量逐个初始化。代码如下:
import tensorflow as tf
A=tf.ones([2,3])
B = tf.Variable(tf.random_normal([2, 3], stddev=0.35),name="B")
result=A+B
op=tf.initialize_all_variables() #初始化所有变量
with tf.Session() as sess:
print('**************')
sess.run(op)
print('----------------------')
print(sess.run(result))
import tensorflow as tf
import numpy as np
A=tf.placeholder(tf.float32,shape=(2,3),name='A')
B=tf.placeholder(tf.float32,shape=(2,3),name='B') #占两个(2,3)的张量位置
input1=np.random.random((2,3))
input2=np.random.random((2,3)) #产生两个随机的(2,3)矩阵
print(input1)
print(input2)
print('------------------------------')
print(input1+input2)
result=A+B
with tf.Session() as sess:
AaddB=sess.run(result,feed_dict={A:input1,B:input2}) #在字典中给出每个用到的placeholder的取值
print('-----------------')
print(AaddB)
[[0.8220202 0.15559222 0.18267369]
[0.34102596 0.12183 0.44073277]]
[[0.75545978 0.48099172 0.7880773 ]
[0.52183775 0.3582586 0.08766639]]
------------------------------
[[1.57747997 0.63658394 0.97075099]
[0.86286372 0.4800886 0.52839916]]
2019-10-14 21:03:07.701364: I tensorflow/core/platform/cpu_feature_guard.cc:141] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2
-----------------
[[1.57748 0.6365839 0.970751 ]
[0.8628637 0.4800886 0.52839917]]
从结果中我们看到运行正确。
本文介绍了TensorFlow的基本概念,基本原理和编程基本步骤,并给出了两个简单例子。TensorFlow其实就是一个框架性工具,只要我们能好好看工具的说明书,掌握其操作套路,就一定能使用好这个工具。