预训练的深度神经网络
您可以采用预训练的图像分类神经网络,它已学会从自然图像中提取功能强大且包含丰富信息的特征,并以此作为学习新任务的起点。大多数预训练神经网络是基于 imagenet 数据库 [1] 的子集进行训练的,该数据库用于 imagenet large-scale visual recognition challenge (ilsvrc) [2] 中。这些神经网络已经对超过一百万个图像进行了训练,可以将图像分为 1000 个对象类别,例如键盘、咖啡杯、铅笔和多种动物。通常来说,使用预训练神经网络进行迁移学习比从头开始训练神经网络更快更容易。
您可以将之前训练过的神经网络用于以下任务:
目的 | 描述 |
---|---|
分类 | 将预训练的神经网络直接应用于分类问题。要对新图像进行分类,请使用 。有关如何使用预训练神经网络进行分类的示例,请参阅使用 googlenet 对图像进行分类。 |
特征提取 | 通过使用层激活值作为特征,使用预训练神经网络作为特征提取器。您可以使用这些激活值作为特征来训练另一个机器学习模型,例如支持向量机 (svm)。有关详细信息,请参阅特征提取。有关示例,请参阅。 |
迁移学习 | 从基于大型数据集训练的神经网络中提取层,并基于新数据集进行微调。有关详细信息,请参阅迁移学习。有关简单的示例,请参阅。要尝试更多预训练的神经网络,请参阅。 |
比较预训练的神经网络
当选择适用于您的问题的神经网络时,预训练神经网络具有不同的重要特征。最重要的特征是神经网络的准确度、速度和规模。选择神经网络时通常需要在这些特征之间进行权衡。使用下图比较 imagenet 验证准确度和使用神经网络进行预测所需的时间。
提示
要开始迁移学习,请尝试选择一个更快的神经网络,例如 squeezenet 或 googlenet。然后,您可以快速迭代并尝试不同设置,如数据预处理步骤和训练选项。一旦您感觉到哪些设置运行良好,请尝试更准确的神经网络,例如 inception-v3 或 resnet,看看这是否能改进您的结果。
注意
上图仅显示不同神经网络的相对速度。准确的预测和训练迭代时间取决于您使用的硬件和小批量大小。
理想的神经网络具有高准确度并且速度很快。该图显示的是使用现代 gpu (nvidia® tesla® p100) 和大小为 128 的小批量时分类准确度对预测时间的结果。预测时间是相对于最快的神经网络来测量的。每个标记的面积与神经网络在磁盘上的大小成正比。
imagenet 验证集上的分类准确度是衡量在 imagenet 上训练的神经网络准确度的最常见方法。如果您的神经网络在 imagenet 上准确,则当您使用迁移学习或特征提取将网络应用于其他自然图像数据集时,您的网络通常也是准确的。这种泛化之所以可行,是因为神经网络已学会从自然图像中提取强大的信息特征,这些特征可以泛化到其他类似的数据集。但是,在 imagenet 上的高准确度并不能始终直接迁移到其他任务,因此最好尝试多个神经网络。
如果您要使用受限制的硬件执行预测或通过 internet 分发神经网络,则还要考虑神经网络在磁盘上和内存中的大小。
神经网络准确度
可以使用多种方法来计算基于 imagenet 验证集的分类准确度,不同数据源使用不同的方法。有时使用包含多个模型的集合,有时使用多次裁剪对每个图像进行多次计算。有时会引用 top-5 准确度,而不是标准 (top-1) 准确度。由于这些差异,通常无法直接比较不同数据源的准确度。deep learning toolbox™ 中预训练神经网络的准确度是使用单一模型和单一中心图像裁剪的标准 (top-1) 准确度。
加载预训练的神经网络
要加载 squeezenet 神经网络,请在命令行中键入 squeezenet
。
net = squeezenet;
对于其他神经网络,请使用 googlenet
等函数来获取链接,以便从附加功能资源管理器下载预训练神经网络。
下表列出了基于 imagenet 训练的可用预训练神经网络以及这些网络的一些属性。神经网络深度定义为从输入层到输出层的路径中顺序卷积层或全连接层的最大数量。所有神经网络的输入均为 rgb 图像。
神经网络 | 深度 | 大小 | 参数(单位为百万) | 图像输入大小 |
---|---|---|---|---|
18 | 5.2 mb | 1.24 | 227×227 | |
22 | 27 mb | 7.0 | 224×224 | |
48 | 89 mb | 23.9 | 299×299 | |
201 | 77 mb | 20.0 | 224×224 | |
53 | 13 mb | 3.5 | 224×224 | |
18 | 44 mb | 11.7 | 224×224 | |
50 | 96 mb | 25.6 | 224×224 | |
101 | 167 mb | 44.6 | 224×224 | |
71 | 85 mb | 22.9 | 299×299 | |
164 | 209 mb | 55.9 | 299×299 | |
50 | 5.4 mb | 1.4 | 224×224 | |
* | 20 mb | 5.3 | 224×224 | |
* | 332 mb | 88.9 | 331×331 | |
19 | 78 mb | 20.8 | 256×256 | |
53 | 155 mb | 41.6 | 256×256 | |
82 | 20 mb | 5.3 | 224×224 | |
8 | 227 mb | 61.0 | 227×227 | |
16 | 515 mb | 138 | 224×224 | |
19 | 535 mb | 144 | 224×224 |
*nasnet-mobile 和 nasnet-large 神经网络不是由模块的线性序列构成的。
基于 places365 训练的 googlenet
标准 googlenet 神经网络是基于 imagenet 数据集进行训练的,但您也可以加载基于 places365 数据集训练的神经网络 [3] [4]。基于 places365 训练的神经网络将图像分为 365 个不同位置类别,例如田野、公园、跑道和大厅。要加载基于 places365 数据集训练的预训练 googlenet 神经网络,请使用 googlenet('weights','places365')
。在执行迁移学习以执行新任务时,最常见的方法是使用基于 imagenet 预训练的神经网络。如果新任务类似于场景分类,则使用基于 places365 训练的神经网络可以提供更高的准确度。
有关适用于音频任务的预训练神经网络的信息,请参阅针对音频应用的预训练的神经网络。
可视化预训练的神经网络
您可以使用深度网络设计器加载和可视化预训练神经网络。
deepnetworkdesigner(squeezenet)
要查看和编辑层属性,请选择一个层。有关层属性的信息,请点击层名称旁边的帮助图标。
通过点击新建,在深度网络设计器中浏览其他预训练神经网络。
如果需要下载一个神经网络,请在所需的神经网络上暂停,然后点击安装以打开附加功能资源管理器。
特征提取
特征提取可以简单快捷地利用深度学习的强大功能,而无需投入时间和精力来训练完整神经网络。由于它只需遍历一次训练图像,因此如果您没有 gpu,特征提取会特别有用。您使用预训练神经网络提取学习到的图像特征,然后使用这些特征来训练分类器,例如使用 fitcsvm
(statistics and machine learning toolbox) 的支持向量机。
当您的新数据集很小时,请尝试使用特征提取。由于您仅基于提取的特征来训练简单的分类器,因此训练速度很快。由于几乎没有数据可供学习,因此微调神经网络的更深层也不太可能提高准确度。
如果您的数据与原始数据非常相似,则在神经网络的更深层提取的更具体的特征可能对新任务有用。
如果您的数据与原始数据相差很大,则在神经网络的更深层提取的特征可能对您的任务用处不大。请尝试基于从较浅神经网络层提取的更一般特征来训练最终的分类器。如果新数据集很大,则您也可以尝试从头开始训练神经网络。
resnet 通常是合适的特征提取器。有关如何使用预训练神经网络进行特征提取的示例,请参阅。
迁移学习
您可以通过基于新数据集对神经网络进行训练来微调神经网络中的更深层,并以该预训练神经网络为起点。通过迁移学习来微调神经网络通常比构建和训练新神经网络更快更容易。神经网络已学习到一系列丰富的图像特征,但当您微调神经网络时,它可以学习特定于您的新数据集的特征。如果您有超大型数据集,则迁移学习可能不会比从头开始训练更快。
提示
微调神经网络通常能达到最高的准确度。对于非常小的数据集(每个类不到 20 个图像),请尝试使用特征提取。
与简单的特征提取相比,微调神经网络会更慢,需要完成的工作更多,但由于神经网络可以学习提取不同的特征集,最终的神经网络通常更准确。只要新数据集不是特别小,微调通常比特征提取效果更好,因为微调时神经网络有数据可供学习新特征。有关如何执行迁移学习的示例,请参阅和。
导入和导出神经网络
您可以从 tensorflow™ 2、tensorflow-keras、pytorch® 和 onnx™(开放式神经网络交换)模型格式导入神经网络和层图。您还可以将 deep learning toolbox 神经网络和层图导出为 tensorflow 2 和 onnx 模型格式。
导入函数
外部深度学习平台和模型格式 | 将模型作为神经网络导入 | 将模型作为层图导入 |
---|---|---|
savedmodel 格式的 tensorflow 神经网络 | ||
hdf5 或 json 格式的 tensorflow-keras 神经网络 | ||
.pt 文件格式的追溯的 pytorch 模型 | 不适用 | |
onnx 模型格式的神经网络 |
相对于 importkerasnetwork
和 importkeraslayers
函数,推荐使用 importtensorflownetwork
和 importtensorflowlayers
函数。有关详细信息,请参阅。
如果一个模型具有函数 importtensorflownetwork
、importtensorflowlayers
、importnetworkfrompytorch
、importonnxnetwork
和 importonnxlayers
无法转换为内置 matlab® 层的 tensorflow 层、pytorch 层或 onnx 运算符,则当您导入该模型时,这些函数会创建自动生成的自定义层。这些函数将自动生成的自定义层保存到当前文件夹中的包中。有关详细信息,请参阅。
导出函数
导出神经网络或层图 | 外部深度学习平台和模型格式 |
---|---|
python® 包中的 tensorflow 2 模型 | |
onnx 模型格式 |
exportnetworktotensorflow
函数将 deep learning toolbox 神经网络或层图作为 tensorflow 模型保存在 python 包中。有关如何加载导出的模型并将其保存为标准 tensorflow 格式的详细信息,请参阅和。
通过使用 onnx 作为中间格式,您可以与支持 onnx 模型导出或导入的其他深度学习框架进行互操作。
针对音频应用的预训练的神经网络
audio toolbox™ 提供经过预训练的 vggish、yamnet、openl3 和 crepe 神经网络。使用 matlab 中的 vggish
(audio toolbox)、yamnet
(audio toolbox)、 (audio toolbox) 和 (audio toolbox) 函数或使用 simulink® 中的 (audio toolbox) 和 (audio toolbox) 模块,直接与预训练神经网络交互。您还可以使用深度网络设计器导入和可视化音频预训练神经网络。
下表列出了可用的预训练音频神经网络及其部分属性。
神经网络 | 深度 | 大小 | 参数(单位为百万) | 输入大小 |
---|---|---|---|---|
(audio toolbox) | 7 | 89.1 mb | 22.2 | 1024×1×1 |
(audio toolbox) | 8 | 18.8 mb | 4.68 | 128×199×1 |
vggish (audio toolbox) | 9 | 289 mb | 72.1 | 96×64×1 |
yamnet (audio toolbox) | 28 | 15.5 mb | 3.75 | 96×64×1 |
使用 vggish 和 yamnet 执行迁移学习和特征提取。提取 vggish 或 openl3 特征嵌入,以输入到机器学习和深度学习系统。classifysound
(audio toolbox) 函数和 (audio toolbox) 模块使用 yamnet 定位声音并将其划分到 521 个类别中的一个。 (audio toolbox) 函数使用 crepe 执行深度学习音调估计。
有关如何针对新任务调整预训练音频神经网络的示例,请参阅 (audio toolbox)和。
有关在音频应用中使用深度学习的详细信息,请参阅deep learning for audio applications (audio toolbox)。
github 上的预训练模型
要查找最新预训练模型,请参阅 。
例如:
对于变换器模型,如 gpt-2、bert 和 finbert,请参阅 github® 存储库。
有关预训练 efficientdet-d0 目标检测模型,请参阅 github 存储库。
参考
[1] imagenet. http://www.image-net.org
[2] russakovsky, o., deng, j., su, h., et al. “imagenet large scale visual recognition challenge.” international journal of computer vision (ijcv). vol 115, issue 3, 2015, pp. 211–252
[3] zhou, bolei, aditya khosla, agata lapedriza, antonio torralba, and aude oliva. "places: an image database for deep scene understanding." arxiv preprint arxiv:1610.02055 (2016).
[4] places. http://places2.csail.mit.edu/
另请参阅
| | | | | | | | | | | | | | | | | | | | | | | | | 深度网络设计器