7.5号学习笔记
一:TensorFlow 2.0 Eager模式简介
TensorFlow 2.0把Enger模式作为默认的模式,以此来提高 TensorFlow的易用性和交互的友好性。TensorFlow 2.0的Eager模式是一种命令式编程环境,无须构建计算图,所有的操作会立即返回结果。Eager模式不但使开发者可以轻松地使用TensorFlow进行编程和调试模型,而且还使编程代码变得更加简洁。在TensorFlow官网总结的Eager模式的优势如下。
• 直观的代码结构:使代码更加符合Python的代码结构,整个代码逻辑一目了然。
• 更轻松的调试功能:直接调用操作以检查正在运行的模型并测试更改。
• 自然控制流程:使用Python控制流程而不是图控制流程,降低了动态图模型的规模。
二:TensorFlow 2.0 AutoGraph简介
AutoGraph是tf.function装饰器带来的一个魔法功能,可以将Python控制流转换为计算图,换句话说,就是我们可以直接使用Python实现对计算图进行另一种意义的编辑。AutoGraph将控制流转换为计算图的方式可以带来更快的模型运行效率,以及模型导出上的便利,使用tf.function装饰器具有如下优势:
• 虽然一个函数被tf.function注释后会被编译成图,但是依然可以按照函数的方式进行调用。
• 如果在注释的函数中有被调用的函数,那么被调用的函数也将以图的模式运行。
• tf.function支持Python所有的控制流语句,比如if、for、while等
三:TensorFlow 2.0低阶API基础编程
在TensorFlow 2.0中定义了很多低阶API,在日常编程中除需要用到高阶API外,也需要用到一些低阶API,下面列举一些常用的重要的低阶API。
1.tf.constant
tf.constant提供了常量的声明功能,示例代码如下:
2.tf.Variable
tf.Variable提供了变量的声明功能,示例代码如下:
3.tf.reshape
tf.reshape提供了多阶Tensor的形状变换功能,示例代码如下:
4.tf.math.reduce_mean
tf.math.reduce_mean提供了对Tensor求平均值的功能,输出数据类型会根据输入数据类型来确定。使用该API时可以配置的参数如下。
• input_tensor:配置输入的Tensor。
• axis:配置按行求平均值或按列求平均值,默认是全行全列求平均值。
• keepdims:配置输出结果是否保持二维矩阵特性。
• name:配置操作的名称。
示例代码如下:
5.tf.random.normal
tf.random.normal可以随机生成一个Tensor,其值符合正态分布。使用该API时有如下参数需要配置。
• shape:配置生成Tensor的维度。
• mean:配置正态分布的中心值。
• stddev:配置正态分布的标准差。
• seed:配置正态分布的随机生成粒子。
• dtype:配置生成Tensor的数据类型。
示例代码如下:
6.tf.random.uniform
tf.random.uniform可以随机生成一个Tensor,其值符合均匀分布。使用该API时有如下参数需要配置。
• shape:配置生成Tensor的维度。
• minval:配置随机生成数值的最小值。
• maxval:配置随机生成数值的最大值。
• seed:配置正态分布的随机生成粒子。
• dtype:配置生成Tensor的数据类型。
示例代码如下:
7.tf.transpose
tf.transpose提供了矩阵的转置功能。使用该API时配置的参数如下。
• a:输入需要转置的矩阵。
• perm:配置转置后矩阵的形状。
• conjugate:当输入矩阵是复数时,需要配置为True。
• name:配置本次操作的名称。
示例代码如下:
8.tf.math.argmax
tf.math.argmax提供了返回一个数组内最大值对应索引的功能。 使用该API时有如下参数可以配置。
• input:配置输入的数组。
• axis:配置计算的维度。
• output_type:配置输出的格式。
• name:配置操作的名称。
示例代码如下:
9.tf.expand_dims
tf.expand_dims的作用是在输入的Tensor中增加一个维度,比如t是一个维度为[2]的Tensor,那么tf.expand_dims(t,0)的维度就会变成[1,2]。使用这个API时需要配置如下参数。
• input:配置输入的Tensor。
• axis:配置需要添加维度的下标,比如[2,1]需要在2和1之间添加,则配置值为1。
• name:配置输出Tensor的名称。
示例代码如下:
10.tf.concat
tf.concat的作用是将多个Tensor在同一个维度上进行连接,使用该API时需要进行如下参数配置。
• values:配置Tensor的列表或者是一个单独的Tensor。
• axis:配置按行或按列连接,axis=0表示按行连接,axis=1表示按列连接。
• name:配置运算操作的名称。
示例代码如下:
11.tf.bitcast
tf.bitcast提供了数据类型转换功能,使用该API时需要进行如下参数配置。
• input:配置需要进行类型转换的Tensor,Tensor的类型可以为bfloat16,half,float32,float64,int64,int32,uint8,uint16,uint32,uint64,int8,int16,complex64,complex128,qint8,quint8,qint16,quint16,qint32。
• type:配置转换后的数据类型,可以选择的类型包括 tf.bfloat16,tf.half,tf.float32,tf.float64,tf.int64,tf.int32,tf.uint8,tf.uint16,tf.uint32,tf.uint64,tf.int8,tf.int16,
tf.complex64,tf.complex128,tf.qint8,tf.quint8,tf.qint16,tf.quint16,tf.qint32。
• name:配置运算操作的名称。
示例代码如下:
五 TensorFlow 2.0高阶API(tf.keras)
在TensorFlow 2.0版本中完全移除了tf.contrib这个高阶API库,官方推荐的高阶API只有tf.keras。Keras是一个意在降低机器学习编程入门门槛的项目,其在业界拥有众多的拥护者和使用者。经过Keras社区的多年发展,Keras集成了很多符合工业和研究需求的高阶API,使用这些API只需要几行代码就可以构建和运行一个非常复杂的神经网络。TensorFlow官方社区首次宣布发布TensorFlow 2.0版本计划时就明确了Keras会深度融合到TensorFlow中,并且作为官方支持的高阶API。下面我们看看官方文档中提到的tf.keras下的接口模块。
• activations:tf.keras.actibations中包含了当前主流的**函数,可以直接通过该API进行**函数的调用。
• applications:tf.keras.applications中包含的是已经进行预训练的神经网络模型,可以直接进行预测或者迁移学习。目前该模块中包含了主流的神经网络结构。
• backend:tf.keras.backend中包含了Keras后台的一些基础API接口,用于实现高阶API或者自己构建神经网络。
• datasets:tf.keras.datasets中包含了常用的公开数据训练集,可以直接进行使用(需要翻墙),数据集有CIFAR-100、Boston Housing等。
• layers:tf.keras.layers中包含了已经定义好的常用的神经网络层。
• losses:tf.keras.losses中包含了常用的损失函数,可以根据实际需求直接进行调用。• optimizers:tf.keras.optimizers中包含了主流的优化器,可以直接调用API使用。比如Adm等优化器可以直接调用,然后配置所需要的参数即可。
• preprocessing:tf.keras.preprocessing中包含了数据处理的一些方法,分为图片数据处理、语言序列处理、文本数据处理等,比如NLP常用的pad_sequences等,在神经网络模型训练前的数据处理上提供了非常强大的功能。
• regularizers:tf.keras.regularizers中提供了常用的正则化方法,包括L1、L2等正则化方法。
• wrappers:tf.keras.wrappers是一个Keras模型的包装器,当需要进行跨框架迁移时,可以使用该API接口提供与其他框架的兼容性。
• Sequential类:tf.keras.Sequential可以让我们将神经网络层进行
接下来将会构建一个简单的线性回归模型为例介绍TensorFlow 2.0高阶API的使用。
1.使用tf.keras高阶API构建神经网络模型
在TensorFlow 2.0中可以使用高阶API tf.keras.Sequential进行神经网络模型的构建。示例代码如下:
2.使用tf.keras高阶API训练神经网络模型
在完成神经网络模型的构建和编译之后,需要准备训练数据,然后对神经网络模型进行训练。可以使用tf.keras.Sequential的fit方法进 行训练,示例代码如下:
3.使用tf.keras高阶API保存神经网络模型
在完成神经网络模型的训练之后,可以使用Sequential的save方法将训练的神经网络模型保存为H5格式的模型文件。示例代码如下:
4.使用tf.keras高阶API加载模型进行预测
加载神经网络模型需要使用tf.keras.models.load_model这个API,在完成模型的加载后可以使用Sequential的predict方法进行预测。示例代码如下:
matlab篇