Tic商业评论

关注微信公众号【站长自定义模块】,定时推送前沿、专业、深度的商业资讯。

 找回密码
 立即注册

QQ登录

只需一步,快速开始

微信登录

微信扫码,快速开始

  • QQ空间
  • 回复
  • 收藏

TensorFlow2 计算机视觉和深度学习的例子

lijingle 深度学习框架 2022-1-26 16:08 2643人围观

阅读代码是获得 TensorFlow (TF) 专业知识的一种有效方式。 在本文中,我们重用了 TensorFlow 教程中的示例,但我们保持它们的简洁性,并去掉了用于跟踪或演示目的的代码。 我们还将讨论保持在最低限度,以便您可以浏览尽可能多的示例以获得完整的图片。 如果你有问题,特别是在阅读了第一个示例之后,请先阅读本系列的文章。
然而,在大多数示例中,我们保留了示例所需的所有样板代码。 因此,如果需要,请跳过它们。 我们对代码使用照片的形式,因此你无法剪切和粘贴它们,因为可能会更改 TF API。 请参阅示例顶部的链接。 以下是使用 2020 年 12 月发布的 TF 2.4.0 测试的示例列表。
  • Keras MNIST 数据:使用密集层的序列模型,
  • Keras MINST 数据:使用 GradientTape 和数据集训练的自定义 CNN 模型类,
  • 自定义层创建新的模型参数,
  • 数据集性能,
  • 过拟合,
  • 保存和加载,
  • 使用数据增强层对花朵进行分类,
  • 使用数据集映射通过数据增强对花朵进行分类,
  • 迁移学习,
  • 图像分割,
  • CSV 文件的回归:使用 Pandas 处理数据,
  • CSV 预处理,

Keras MNIST 数据:使用dense层的序列模型
使用具有dense层的序列模型对 MNIST NumPy 数据进行分类。


模型概要:


Keras MINST 数据:使用 GradientTape 和数据集训练的自定义 CNN 模型类

在这个例子中,

  • 使用数据集进行训练(特别是,如果样本无法放入内存中),
  • 一个自定义的 CNN 模型类,以及
  • 使用 GraidentTape 进行自定义训练。

首先,我们创建数据集并定义自定义 CNN 模型。


使用 GradientTape 和测试步骤进行自定义训练:


训练循环:


自定义层创建新模型参数

自定义层可以包含其他层和/或具有自己的层参数。 但是,在实例化时可能不知道输入形状。 一旦 TF 知道输入形状,例如通过第一次使用输入调用层,就会调用一个单独的方法“build”来创建参数。


过拟合

在这个例子中:

  • 使用 tf.data 加载 Higgs CSV 数据集,
  • 使用优化器的自定义学习率衰减进行训练,
  • 稍后为 TensorBoard 记录数据,
  • 应用正则化和 dropout 以避免过度拟合,以及
  • 申请早停训练。

希格斯玻色子粒子的检测证明了希格斯场的存在,它为基本粒子(夸克、轻子等)提供了质量。 此示例预测事件的类别——“信号”或“背景”。 “信号”表示 4 轻子事件是由涉及希格斯玻色子的衰变发生的。 否则,它是不涉及希格斯玻色子的衰变的“背景”。 首先,我们使用 tf.data 加载一个 CSV 数据集。 每行包含标签和 28 个特征——21 个是粒子探测器测量的运动学特性,7 个是从这些测量中得出的。


创建一个特征和标签分开的数据集——ds 是批处理的,因此映射在单个操作中完成,然后再取消批处理。


创建训练和验证数据集——它使用“take”和“skip”来划分原始训练样本。


优化器将为优化器使用自定义学习率。


compile_and_fit 将配置训练并拟合模型。 我们还设置了回调来记录 TensorBoard 的数据。


我们建立了一个带有正则化和 dropout 的“组合”模型,以避免过度拟合。


最后,我们训练模型。


我们将此训练和模型(称为组合)的 TensorBoard 数据存储在 $tmp/tensorboard_logs/regularizers/combined 下。 我们可以在不同的director下训练不同的模型,比如正则化器/other_model。


我们可以使用 TensorBoard 在“正则化器”下查看此训练和其他训练的数据。


数据集Performance

为了提高数据集的性能,我们应该缓存和预取数据。 但是我们可能不需要洗牌验证或测试数据集。


保存和加载

在这个例子中,我们保存和恢复一个模型。 首先,我们有加载 MNIST 数据并创建密集模型的样板代码。


接下来,我们为 model.fit 创建一个回调来保存模型。 对于这些检查点,我们只保存权重。


这是创建的checkpoint。


我们可以实例化一个新模型并重新加载权重。


我们可以添加 epoch 编号作为checkpoint文件名的一部分,并且我们可以更改checkpoint的频率(以下每 5 个 epoch)。


这是 50 个 epoch 后的checkpoint。


我们可以加载最新的checkpoint:


要手动保存权重:


或者保存整个模型。 在后一种情况下,我们不需要 Python 代码来恢复模型。


checkpoint管理器

如果我们可以访问优化器和数据迭代器,就像在 GradientTape 中一样,我们可以使用 CheckpointManager 来保存检查点。 这是样板代码。


然后,我们可以配置一个 CheckpointManager。


这包括仅保留 max_to_keep Checkpoint的选项。


我们可以使用它来保存和恢复模型。


使用数据增强层对花朵进行分类

在此示例中,我们使用数据增强来提高模型性能。 准备训练和验证数据集:


使用 Keras 预处理层构建和训练模型:


测试:


使用数据集映射通过数据增强对花朵进行分类

我们使用数据集流水线中的映射来执行数据扩充。 在此示例中,我们执行调整大小、重新缩放、翻转和旋转。 这是用于创建数据集和扩充层的样板代码。


然后,我们使用数据集映射进行数据扩充。


这就是模型和训练。


迁移学习

这是在创建数据集时加载猫和狗图片的样板代码。


然后,我们构建了一个模型,其中包含数据增强层、MobileNet v2 的预处理层、预训练的 MobileNet v2 和分类头。 在迁移学习的第一部分,我们冻结 MobileNet v2 层(第 54 行)并仅训练分类头。 我们还将 MobileNet v2(第 65 行)的训练设置为 False,以便它将在推理模式下运行:将不应用 dropout 层,它使用原始训练均值和方差进行批量标准化。


接下来,我们训练模型,


现在,我们进入训练的第二阶段。 我们只会冻结 MobileNet v2 的前 100 层,并再次微调模型的其余部分。


一旦它再次被训练,我们就用它来预测测试图像。


图像分割

图像分割创建一个mask来分割一个对象。


首先,我们加载数据集并创建预处理层。


然后,我们创建数据集。


图像分割模型包含下采样层,然后是上采样层。 这是下采样。


和上采样部分。


上面更复杂的逻辑处理下采样层和上采样层之间的跳过连接——下采样层和下面的上采样层之间的水平连接具有相同的空间分辨率。



这是更精确的图表。


最后,我们训练模型并进行预测。


CSV 文件的回归:使用 Pandas 处理数据

此示例是一个简单的回归问题,用于根据 CSV 文件中包含的特征预测汽车的 MPG。 使用 Pandas 为 CSV 文件准备数据集:


可视化特征相互关系。



创建 training/testing features/labels.


创建具有Normalization层的模型以normalize每个特征。


fit、评估和预测:


保存并加载模型:


模型将保存为:


CSV 预处理

在这个例子中,我们将预测谁将在泰坦尼克号事故中幸存下来。 此示例演示如何预处理 CSV 数据。

首先,我们将从 CSV 文件加载数据。


我们收集所有数字字段,对其进行规范化,并将它们放入 preprocessed_inputs。


将所有类别字段转换为 one-hot 向量并将它们附加到 preprocessed_inputs 中。


Concatenate所有输入并创建预处理模型。


创建分类模型。 训练并做出预测。



路过

雷人

握手

鲜花

鸡蛋
我有话说......

TA还没有介绍自己。

电话咨询: 135xxxxxxx
关注微信