TensorFlow的框架

版权声明:未经同意,严禁转载 https://blog.csdn.net/pengchengliu/article/details/88114214

一、张量                                                                                                                                     点击返回总目录

二、计算图

三、会话

四、参数

五、神经网络实现过程

使用TensorFlow搭建神经网络时,我们经常:

使用张量表示数据;使用计算图搭建神经网络;使用会话执行计算图,再优化神经网络中的参数,获得更准确的模型。

一、张量

首先介绍什么是张量。其实,张量就是多维数组,就是列表。用阶表示张量的维度。

              

0阶张量,就是标量,比如123。一阶张量,叫做向量,表示的是一个一维数组,比如列表[1,2,3]。二阶张量叫做矩阵,表示的是一个二维数组。

判断张量是几阶的,就看黄色框框这个地方有几个"["。有n个"["就是n阶。所以,张量可以表示0阶到n阶数组。

例:实现两个张量的加法

import tensorflow as tf                    #导入TensorFlow模块

a=tf.constant([1.0,2.0])                   #定义一个张量a等于常数[1.0,2,0]。tf.constant表示定义常数。
b=tf.constant([3.0,4.0])

result =a+b
print(result)

运行结果:

Tensor("add:0", shape=(2,), dtype=float32)

意思是result是一个名字叫“add:0”的张量。shape=(2,):括号中有一个数,表示维度是1;2表示第1个维度里有两个元素。

dtype=float32表示数据是浮点型的。TensorFlow的数据类型有tf.float32(32位的浮点)、tf.int32(32位的整型)等等。

                      

二、计算图

其实上面的例子所描述的,就是一个计算过程,就是一张计算图。从print输出的内容,我们可以看到,只显示出这个结果是个张量,并没有实际运算张量具体的值。所以计算图只描述了计算过程,不计算运算结果。

所谓计算图(Graph),就是搭建神经网络的计算过程,他是承载一个或多个下面这种节点(整个方框里面的是一个节点)的一张图,只搭建网络,不运算。

                                    

神经元的基本模型就是上面图中这个样子,其实就是数学里的乘加运算。我们用张量运算描述这个神经元为:

import tensorflow as tf

x=tf.constant([[1.0,2.0]])         #x是一行两列的矩阵。
w=tf.constant([[3.0],[4.0]])      #w是两行一列的矩阵。

y=tf.matmul(x,w)                     #矩阵乘法。

print(y)

运行结果:

Tensor("MatMul:0", shape=(1, 1), dtype=float32)     #结果为二维,一行一列的矩阵。

我们从print的结果可以看到,y是个张量,只承载了搭建计算过程的计算图,并没有运算。

三、会话

如果我们想得到运算结果,就要用到会话了。

所谓会话(session),是执行运算图中节点运算的。我们用with结构实现。

例:

import tensorflow as tf

x=tf.constant([[1.0,2.0]])        #x是一行两列的矩阵。
w=tf.constant([[3.0],[4.0]])      #w是两行一列的矩阵。

y=tf.matmul(x,w)                  #矩阵乘法。

print(y)
with tf.Session() as sess:
    print(sess.run(y))

运行结果:

Tensor("MatMul_1:0", shape=(1, 1), dtype=float32)
[[11.]]

四、神经网络的参数

神经网络的参数是神经元线上的权重w,用变量表示。一般会先随机生成。常常这样写:

         

tf.Variable()表示生成变量,生成的方式写在括号里。比如tf.random_normal表示生成正态分布的随机数,形状是2行3列,标准差是2,均值为0,随机数种子为1。如果把随机数种子去掉,则每次生成的随机数不一样。标准差、均值、随机种子三个如果没有特殊要求,可以不写。

tf.random_normal()函数可以用tf.truncated_normal()函数替换,表示去掉过大偏离点的正态分布。也就是,如果随机生成的数据偏离平均值超过两个标准差,这个数据将重新生成。

同样,tf.random_normal()函数可以用tf.random_uniform()函数替换,tf.random_uniform()为平均分布函数。

         

除了生成随机数,还可以生成常量。比如,tf.zeros生成全0数组等。

         

五、神经网络实现过程

当我们知道了张量、计算图、会话和参数后,我们可以学习神经网络实现过程了。

          

其实,神经网络的实现只要4步:

第1步,准备数据集,

第2步,前向传播。数据从输入到输出,走过搭建好的神经网络。可以计算得到输出。

第3步,反向传播。把大量数据喂给神经网络,得到大量输出,把每次输出与标准答案的差反向传回神经网络,调节神经网络的参数,   

            直到模型达到要求。

第4步,当模型达到要求后,可以使用这个优化好参数后的模型。将新数据送入前向神经网络,便可以实现预测和分类了。

猜你喜欢

转载自blog.csdn.net/pengchengliu/article/details/88114214