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()进行计算: