电子书

深度学习实用指南:从数据到部署

第 4 章

使用迁移学习


您可以使用迁移学习基于现有架构进行构建,而不必完全从头开始设计和训练架构。本章介绍如何修改现有架构,并重新训练它来完成您的特定任务。

节

迁移学习的工作原理是什么?

我们借助一个简单的神经网络描述,说明如何对基于图像的架构进行迁移学习。经过训练的网络可以寻找数据中的模式,在本例中是寻找图像中的模式。为此,该网络在较浅的层中寻找斑点、边缘和颜色等基元特征,然后,层层深入的过程中,网络会将它们组合为更加复杂的特征,最后将这些特征组合为可以标注的最终模式。

深度学习-工程师-电子书-第 4 章-模型-训练-雏菊

假如有一个用来识别图像中花朵之类图案的现成网络,而您要开发的是一个能在传感器数据中找出模式的网络,乍看之下,前者似乎没什么帮助。但有意思的是,借助信号的时频表示,如频谱图或尺度图,我们可以对信号进行预处理以获得图像。斑点、颜色、环和线条等基元特征几乎存在于所有图像,包括信号的时频图像。

深度学习-工程师-电子书-第 4 章-图像中的模式

借助迁移学习,您可以利用预训练网络识别这些基元特征的能力,只需替换用于组合特征和完成最终分类的最后几个层即可。

深度学习-工程师-电子书-第 4 章-模型-训练-替换

一般情况下,训练这样一个网络会比从零开始要快得多,所需的数据也少得多,因为它只需要学习如何组合特征来识别您要寻找的较大的模式。

节

示例:识别和标注手势

在此示例中,我们在简单的硬件上通过迁移学习来识别和标注手势。此示例以一个预训练的 GoogLeNet 网络为起点,然后对其重新训练以识别三轴加速度数据中的击掌模式。

深度学习-工程师-电子书-第 4 章-Arduino-装置

MATLAB Support Package for Arduino Hardware 用于通过 Arduino 从 MPU-9250 中读取加速度数据。只需三行代码即可连接到 Arduino,实例化 MPU9250 对象,然后读取加速度计。

深度学习-工程师-电子书-第 4 章-加速度计-代码片段

以 50 Hz 的频率读取加速度计并显示读数

该三轴加速度数据转换成一个彩色图像,其中图像的红、绿、蓝三个通道分别表示 x、y 和 z 加速度轴的尺度图。

要训练网络识别击掌模式,您需要为网络提供经过标注的训练数据。在本例中,训练数据是多个击掌图像以及多个其他手臂动作的图像。

此示例收集了 200 个经过标注的训练图像。这些数据是通过测量一个人手臂的真实动作来收集的。然后,从这些训练数据中剔除可能破坏训练的离群值和其他动作,并删除对应的图像。

我们使用深度网络设计器替换最后几个层。要替换的只有 GoogLeNet 网络末尾的两个层。这两个层分别是全连接层(用于将基元特征组合为特定模式)和输出层(用于分配标签)。

深度学习-工程师-电子书-第 4 章-深度网络设计器

导入训练数据,并留出其中 20% 的图像用于验证。有了经过训练的网络,下一步是基于更大的数据集测试该网络。在本例中,我们对真实手臂动作试用击掌分类器来进行测试。

这里有一篇关于构建击掌计数器的博客文章,对示例进行了更深入的讲解。

节

进一步了解深度网络设计器和迁移学习