PYTHON DAY4 TensorFlow概念

安装TensorFlow中,先学习相关理论(昨天玩塞尔达去了 反思1s


TensorFlow是机器学习和深度学习的工具。

除了主要的包,还有其他的库

  • TensorBoard——TensorFlow内部图的可视化工具
  • TensorFlow Fold——生成动态计算图表
  • TensorFlow Transform——生成和管理输入数据管道

直接这么说也不清楚,首先记录一下TensorFlow(以下简写tf)的基本概念。

  #4.1  数据流图

  tf基于图的组织和使用记忆数据在图中的流动,充分利用这样的结构来实现数学运算。

  在tf运行时内部创建的图叫做数据流图

  数据流图的节点表示数学运算表示张量(多维数组)。

  数据流图根据运行时的数学模型构建,数学模型则是待执行计算的基础。tf支持编写代码执行一系列指令来定义数学模型,tf负责将模型转换为内部数据流图。

  因此,搭建的深度学习神经网络模型也将转换为数据流图。由于神经网络结构和图的数学表示相似,该库适用于深度学习项目的开发也就自然而然。

  另外,tf并不局限于深度学习的领域,还常用于表示人工神经网络。

  要使用TensorFlow,首先需要安装java环境和TensorFlow库:

  • 首先给本机安装java环境
  • 然后在Anaconda Prompt中输入conda install tensorflow,
  • 等待大约十分钟后
  • 在python中就可以了。

 

 

 

  #4.2  基本概念

  tf采用模型会话的概念,以一系列待定命令定义程序的结构。

  ##4.2.1  模型

  模型是tf 项目的基础,它包括定义系统的全部变量。

  可直接定义变量或者用常量组成的数学表达式,如下图所示就是定义变量的过程:

 

   在查看这些值的时候,输出的并不是值(6),而是一个对象:

 

   实际上定义的变量属于tf的数据流图(前面说了,这个由节点和边组成,用来表示数学模型)。获取模型的,需要使用会话

  深度学习中,直接用到的变量是用占位符(placeholder)进行表示,就是说这些张量直接参与数据的流动和每个神经元的处理。占位符用于构建神经网络对应的数据流图,及时不完全了解需要计算的数据,也可以在内部创建运算,因此可以构建图和神经网络的结构。

  在实际运用中,给定包含待分析数据x(一个张量)的训练集和期望值y(张量)(张量:用于存放整个神经网络所需的数据),可以定义两个占位符X和Y:

 

   定义了所有相关变量,就是定义了作为神经网络系统基础的数学模型,接下来,需要执行适当的处理,并使用tf.global_variables_initializer()函数来初始化模型:

 

  至此,模型完成了初始化,并且加载到了内存,之后可以开始计算了,但是,计算之前需要跟tf runtime系统通讯,即,需要创建tf会话,会话期间可以执行一系列命令,跟创建的模型对应的基础数据流图进行交互。

  ##4.2.2  会话

  可以用tf.Session()创建一个新的会话

  在会话中,可以执行计算,接受所获取的变量值作为结果,即,可以在处理过程中检查数据流图的状态。

  前面说过tf的操作是创建内部图结构为基础的,图中的节点能够处理沿图中连接流动的张量的内部数据。因此,开始一个会话,实际上就是实例化数据流图。

  会话主要有两种方法:

  • 使用session.extend()在计算过程中图,比如增加节点或者连接;
  • 通过session.run()执行图,获取输出结果

  因为一些运算是在同一会话中执行的,所以通常使用with()结构体:tf.session()方法的所有调用都能传给会话。

  例如,只查看在模型中定义的变量的值,并输出到终端(能看到y的值是6):

 

   # 4.3 张量

   ## 4.3 1 张量的定义

  张量是tf库的基本元素,一个张量由3个参数确定:

  • 阶(rank)——张量的维度(比如矩阵是2阶,向量则是1阶)
  • 形状(shape)——行和列的数量
  • 类型——张量元素的类型

  张量就是多维数组,所以可以用Numpy创建,并使用tf.convert_to_tensor()转换为tf张量:

 

 *tf.convert_to_tensor()有两个参数,1参是需要转换的数组,2参是要将其转换成的数据类型(比如int32)。

  当然,也可以用tf直接创建张量,比如用tf.zero()创建元素全为0的张量(参数为shape),用tf.ones()创建元素全为1的张量(参数为shape),用tf.random_uniform()创建一个元素呈均匀分布的张量(取值范围内所有数出现的可能性相同,参数有4个:shape、minval=、maxval=、dtype=),用tf.random_normal()创建给定均值标准差的正态分布张量(输入参数为shape、mean=、stddev=)。

  以tf.random_normal()为例:

 

   ## 4.3.2 张量的运算

  定义张量后,需要对其执行运算,加、乘、行列式都是比较常见的基本运算。

  先,定义两个张量t1和t2:

 

   查看一下:

 

   张量相加使用tf.add()函数,相乘使用tf.matmul()函数:

 

   行列式则是用tf.matrix_determinant()进行计算:

 

posted @ 2020-09-17 21:48  Shilo  阅读(122)  评论(0编辑  收藏  举报