TensorFlow深度学习(6)

6、Keras高层接口

6.1常见功能模块

Keras 提供了一系列高层的神经网络相关类和函数,如经典数据集加载函数、网络层类、模型容器、损失函数类、优化器类、经典模型类等。
对于经典数据集,通过一行代码即可下载、管理、加载数据集,这些数据集包括Boston 房价预测数据集、CIFAR 图片数据集、MNIST/FashionMNIST 手写数字图片数据集、IMDB 文本数据集等。

6.1.1常见网络层类

以 Softmax 层为例,它既可以使用 tf.nn.softmax 函数在前向传播逻辑中完成 Softmax运算,也可以通过 layers.Softmax(axis)类搭建 Softmax 网络层,其中 axis 参数指定进行softmax 运算的维度。
TensorFlow深度学习(6)_第1张图片
当然,也可以直接通过 tf.nn.softmax()函数完成计算:
在这里插入图片描述

6.1.2网络容器

可以通过 Keras 提供的网络容器 Sequential 将多个网络层封装成一个大网络模型,只需要调用网络模型的实例一次即可完成数据从第一层到最末层的顺序传播运算。
TensorFlow深度学习(6)_第2张图片
Sequential 容器也可以通过 add()方法继续追加新的网络层,实现动态创建网络的功能:
TensorFlow深度学习(6)_第3张图片
Sequential 对象的 trainable_variables 和 variables 包含了所有层的待优化张量列表和全部张量列表,
TensorFlow深度学习(6)_第4张图片

8.2模型装配、训练与测试

TensorFlow深度学习(6)_第5张图片
TensorFlow深度学习(6)_第6张图片
TensorFlow深度学习(6)_第7张图片
在这里插入图片描述
TensorFlow深度学习(6)_第8张图片
TensorFlow深度学习(6)_第9张图片
TensorFlow深度学习(6)_第10张图片

8.3模型的保存与加载

在Keras中,有三种常见的模型保存与加载方法:

8.3.1网络方式

TensorFlow深度学习(6)_第11张图片

8.3.2张量方式

TensorFlow深度学习(6)_第12张图片
因为使用相同的网络结构才能正确恢复网络状态,所以这个一般在拥有网络源文件的情况下才使用。

8.3.3SaveModel方式

TensorFlow 提出的 SavedModel 方式更具有平台无关性。
TensorFlow深度学习(6)_第13张图片
TensorFlow深度学习(6)_第14张图片

8.4自定义网络

对于需要创建自定义逻辑的网络层,可以通过自定义类来实现。在创建自定义网络层类时,需要继承自 layers.Layer 基类;创建自定义的网络类时,需要继承自 keras.Model 基类,这样建立的自定义类才能够方便的利用 Layer/Model 基类提供的参数管理等功能,同时也能够与其他的标准网络层类交互使用。

8.4.1自定义网络层

TensorFlow深度学习(6)_第15张图片

8.4.2自定义网络

下面我们来创建自定义网络类,首先创建类,并继承自 Model 基类,分别创建对应的网络层对象:
TensorFlow深度学习(6)_第16张图片
TensorFlow深度学习(6)_第17张图片

8.5模型乐园

对于常用的网络模型,如 ResNet、VGG 等,不需要手动创建网络,可以直接从keras.applications 子模块中通过一行代码即可创建并使用这些经典模型,同时还可以通过设置 weights 参数加载预训练的网络参数。

8.5.1加载模型

以 ResNet50 网络模型为例,一般将 ResNet50 去除最后一层后的网络作为新任务的特征提取子网络,即利用在 ImageNet 数据集上预训练好的网络参数初始化,并根据自定义任务的类别追加一个对应数据类别数的全连接分类层或子网络,从而可以在预训练网络的基础上快速、高效地学习新任务。
TensorFlow深度学习(6)_第18张图片
include_top 参数为 False,可以选择去掉 ResNet50 最后一层
TensorFlow深度学习(6)_第19张图片
我们在 ResNet50 基础上重新构建新网络。新建一个池化层(这里的池化层暂时可以理解为高、宽维度下采样的功能),将特征从[, 7,7,2048]降维到[, 2048]。
TensorFlow深度学习(6)_第20张图片
最后新建一个全连接层,并设置输出节点数为 100
TensorFlow深度学习(6)_第21张图片
在创建预训练的 ResNet50 特征子网络、新建的池化层和全连接层后,我们重新利用Sequential 容器封装成一个新的网络:
TensorFlow深度学习(6)_第22张图片
通过设置 resnet.trainable = False 可以选择冻结 ResNet 部分的网络参数,只训练新建的网络层,从而快速、高效完成网络模型的训练。
TensorFlow深度学习(6)_第23张图片

8.6测量工具

8.6.1新建测量器

TensorFlow深度学习(6)_第24张图片
TensorFlow深度学习(6)_第25张图片
TensorFlow深度学习(6)_第26张图片
TensorFlow深度学习(6)_第27张图片
TensorFlow深度学习(6)_第28张图片
TensorFlow深度学习(6)_第29张图片

你可能感兴趣的:(#,TensorFlow深度学习,神经网络,python,深度学习,机器学习)