TensorFlow 与 MATLAB
2023 年 3 月 14 日

MathWorks 产品营销经理 Sivylla Paraskevopoulou 撰写

在本博文中,我将向您展示如何在深度学习应用程序中使用 TensorFlow™ 与 MATLAB®。更具体地说,我将向您展示如何将预训练的 TensorFlow 模型转换为 MATLAB 模型,将模型从 MATLAB 转换为 TensorFlow,以及如何一起使用 MATLAB 和 TensorFlow。

MATLAB 提供的这些互操作性功能,可以让在不同平台上工作的同事、团队和社区之间进行协作。今天的帖子将向您展示如何使用这些功能,并提供您可能想要使用它们的示例以及它们如何将 AI 开发人员和工程师的工作连接起来以实现特定领域的 AI 系统设计。

介绍

什么是 MATLAB?

MATLAB 是一个为工程和科学应用量身定制的计算平台,例如数据分析、信号和图像处理、控制系统、无线通信和机器人技术。MATLAB 包括一种编程语言、交互式应用程序以及用于自动生成嵌入式代码的工具。MATLAB 也是 Simulink® 的基础,Simulink® 是一个用于模拟复杂的多领域系统的框图环境。

与 Python® 库类似,MATLAB 提供工具箱来实现不同的目标。更具体地说,MATLAB 为深度学习工作流程提供了 Deep Learning Toolbox™。Deep Learning Toolbox 提供了一个用于设计和实现深度神经网络的框架,其中包括算法、预训练模型和应用程序。它可以与特定领域的工具箱结合使用,例如计算机视觉、信号处理和音频应用程序。

Flow chart depicting the correlation between Python and MATLAB as programming languages to TensorFlow and Deep Learning Toolbox as Deep Learning Platforms respectively
图示:Python 和 MATLAB 是编程语言;Python 可以利用 TensorFlow 库进行深度学习工作流程,而 MATLAB 提供 Deep Learning Toolbox。

为什么选择 TensorFlow 和 MATLAB?

TensorFlow 和 MATLAB 都被广泛用于深度学习。许多 MATLAB 客户有兴趣将 TensorFlow 模型集成到他们的 AI 设计中,以创建定制工具、模拟复杂系统或优化数据建模。TensorFlow 用户还可以利用 MATLAB 生成、分析和可视化训练数据、对模型输出进行后处理,并将训练后的神经网络部署到桌面、Web 应用程序或嵌入式硬件。

例如,工程师已将 TensorFlow 模型集成到 Simulink(MATLAB 仿真环境)中,以开发电动汽车的电池荷电状态估计器,而科学家则使用 MATLAB 与 TensorFlow 来构建一个用于读取气候数据的自定义工具箱。有关这些示例的更多详细信息,请参阅 将 TensorFlow 模型集成到 Simulink 中以进行仿真和代码生成MATLAB 的气候数据存储工具箱

下一步是什么?

现在您已经开始了解将 TensorFlow 与 MATLAB 结合使用的优势。让我们在接下来的三个部分中更深入地了解如何在技术上使用 TensorFlow 与 MATLAB。

您将看到使用 TensorFlow 与 MATLAB 是多么简单,以及为什么我(和其他工程师)喜欢选择将它们组合起来用于深度学习应用程序。为什么选择,当您不必选择呢?

将模型从 TensorFlow 转换为 MATLAB

Flow chart showing the conversion of a model `importTensorFlowNetwork` from TensorFlow to MATLAB

您可以使用 MATLAB 函数 importTensorFlowNetwork 将预训练模型从 TensorFlow 转换为 MATLAB。一个可能会使用此函数的场景是:数据科学家在 TensorFlow 中创建了一个模型,然后工程师将此模型集成到在 MATLAB 中创建的 AI 系统中。

在这里我们将向您展示如何将图像分类 TensorFlow 模型导入 MATLAB,并 (1) 用它进行预测,以及 (2) 将其集成到 AI 系统中。

将模型从 TensorFlow 转换为 MATLAB
在将预训练的 TensorFlow 模型导入 MATLAB 网络之前,您必须将 TensorFlow 模型保存为 SavedModel 格式。

Python 代码

import tensorflow as tf tf.saved_model.save(model.modelFolder)

然后,您可以使用 MATLAB 函数 importTensorFlowNetwork 将 TensorFlow 模型导入 MATLAB。您只需要一行代码!

MATLAB 代码

modelFolder = “EfficientNetV2L”; net = importTensorFlowNetwork(modelFolder,OutputLayerType=”classification”)

对图像进行分类
读取您要分类的图像。将图像调整为网络的输入大小。
MATLAB 代码
Im = imread(“mydoc.jpg”); InputSize = net.Layers(1).InputSize; Im = imresize(Im,InputSize(1:2));

在对图像进行分类之前,可能需要进一步的预处理或将维度顺序从 TensorFlow 更改为 MATLAB。要了解更多信息并获取有关导入模型的常见问题的答案,请参阅 从 TensorFlow 导入模型的技巧.

预测并绘制带有分类标签的图像。MATLAB 代码:

label = classify(net,Im); imshow(Im) title("预测标签:" + string(label));


Image of a pomeranian with text 'Predicted label: Pomeranian'

要查看有关如何将图像分类 TensorFlow 模型导入 MATLAB 以及如何使用模型进行预测的完整示例,请参阅 使用转换后的 TensorFlow 模型在 MATLAB 中进行图像分类。要了解有关将 TensorFlow 模型导入 MATLAB 的更多信息,请查看博文 从 TensorFlow、PyTorch 和 ONNX 导入模型.

迁移学习
将预训练的 TensorFlow 模型导入 MATLAB 的一个常见原因是执行迁移学习。迁移学习是将预训练的深度学习模型进行微调以使其适应新问题。例如,您在 MATLAB 中进行目标检测,并且您发现了一个 TensorFlow 模型可以提高检测精度,但您需要使用您的数据重新训练该模型。使用迁移学习通常比从头开始训练网络更快更容易。

在 MATLAB 中,您可以通过使用 深度网络设计器 (DND) 应用程序以编程方式或交互方式执行迁移学习。使用内置函数,您可以通过几行 MATLAB 代码轻松地进行模型手术(准备一个网络以在新的数据上进行训练),这些函数可以替换、删除或在网络架构的任何部分添加层。例如,请参阅 训练深度学习网络以对新图像进行分类。使用 DND,您可以交互式地准备网络进行训练,训练网络,导出重新训练的网络,然后将其用于新任务。例如,请参阅 使用深度网络设计器进行迁移学习.

Screen grab showing editing of a pretrained model in Deep Network Designer
图示:使用低代码应用程序编辑预训练模型以进行迁移学习。

Simulink 中的 AI 系统设计
Simulink 是一个块图环境,用于设计具有多域模型的系统,在迁移到硬件之前模拟系统,以及在不编写代码的情况下进行部署。Simulink 用户表达了对引入 AI 模型并模拟整个系统的能力的兴趣。事实上,这在 Simulink 块中非常容易实现。

在下图中,您可以看到一个非常简单的 AI 系统,它使用导入的 TensorFlow 模型读取并分类图像。本质上,Simulink 系统执行与上面所示相同的流程。要了解有关如何设计和模拟此类系统的更多信息,请参阅 使用导入的 TensorFlow 网络在 Simulink 中对图像进行分类.

Screen grab of using image_classifier in Simulink
图示:用于预测图像标签的简单 Simulink 系统

当然,Simulink 的功能远远超出了在给我的狗剪了糟糕的发型后对它的图像进行分类并试图预测它的品种。例如,您可以在 Simulink 模型中使用深度神经网络来执行车道和车辆检测。要了解更多信息,请参阅 使用 Simulink 和 NVIDIA Jetson 进行机器学习.

Moving image showing lane and vehicle detection output in Simulink
使用深度学习在 Simulink 中进行车道和车辆检测

将模型从 MATLAB 转换为 TensorFlow

Flow chart showing conversion of `exportnetworktoTensorFlow` from MATLAB to TensorFlow

您可以使用 MATLAB 函数 exportNetworkToTensorFlow 将已训练或未训练的模型从 MATLAB 转换为 TensorFlow。在 MATLAB 中,我们将已训练的模型称为网络,并将未训练的模型称为层图。 预训练的深度神经网络 文档页面向您展示了如何获取预训练网络的所有选项。您也可以创建自己的网络。

创建未训练模型

创建双向长短期记忆 (BiLSTM) 网络以对序列数据进行分类。LSTM 网络将序列数据作为输入,并根据序列数据的各个时间步长进行预测。

Architecture of LSTM model
图示:LSTM 模型的架构
MATLAB 代码

inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ sequenceInputLayer(inputSize) bilstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]; lgraph = layerGraph(layers);

要了解如何为此模型创建训练数据集,请参阅 将未经训练的层图导出到 TensorFlow。一个重要步骤是将序列数据从深度学习工具箱排序 (CSN) 转换为 TensorFlow 排序 (NSC),其中 C 是序列的特征数, S 是序列长度, N 是序列观测数。要详细了解不同深度学习平台输入数据的维度排序,请参阅 输入维度排序

将模型导出到 TensorFlow

将层图导出到 TensorFlow。exportNetworkToTensorFlow 函数将 TensorFlow 模型保存在 Python 包 myModel 中。

MATLAB 代码

exportNetworkToTensorFlow(lgraph,”myModel”)

训练 TensorFlow 模型

在 Python 中运行以下代码以从 Python 包 myModel 中加载导出的模型。您也可以在 Python 中编译和训练导出的模型。要训练 模型,请使用您之前创建的 training_data.mat 中的训练数据。

Python 代码

import myModel model = myModel.load_model()

加载训练数据。

Python 代码

import scipy.io as sio data = sio.loadmat("training_data.mat") XTrain = data["XTrain"] YTrain = data["TTrain"]

编译和训练模型。

Python 代码
model.compile(optimizer = "adam", loss = "sparse_categorical_crossentropy", metrics=["accuracy"]) r = model.fit(XTrain, YTrain, epochs=100, batch_size=27)

要了解有关如何将 MATLAB 模型导出到 TensorFlow 的更多信息,请查看我们的 博客文章

moving image showing how to export an untrained model from MATLAB to TensorFlow and train on Google Colab
将未经训练的模型从 MATLAB 导出到 TensorFlow 并使用 Google Colab 进行训练

一起运行 TensorFlow 和 MATLAB

TensorFlow + MATLAB

您已经了解了如何在 TensorFlow 和 MATLAB 之间转换模型。您还可以选择通过从 MATLAB 调用 Python 或从 Python 调用 MATLAB 来一起使用 TensorFlow 和 MATLAB(从同一个环境运行)。这样,您就可以通过创建集成工作流来利用每个环境的最佳功能。

例如,TensorFlow 可能提供更新的模型,但您喜欢 MATLAB 应用程序用于标记数据,或者您可能希望使用实验管理器应用程序在多个初始条件下训练您的 TensorFlow 模型(请参阅 示例)。

从 MATLAB 调用 Python

除了将 TensorFlow 模型导入 MATLAB 之外,您还可以选择通过从 MATLAB 调用 Python 来直接在 MATLAB 工作流中使用 TensorFlow 模型。您可以通过添加 py. 前缀来访问 Python 库,并使用 pyrun 函数从 MATLAB 执行任何 Python 语句。有关显示如何在 MATLAB 中调用 TensorFlow 模型的示例,请参阅 在 MATLAB 中使用 TensorFlow 进行图像分类

此选项可能有用的一种用例如下。您已在 MATLAB 中创建了一个目标检测工作流。您想快速比较 TensorFlow 模型,以找到最适合您的任务的模型,然后将最适合的模型导入 MATLAB。从 MATLAB 调用 TensorFlow 以快速运行推理测试。

从 Python 调用 MATLAB

您可以使用 MATLAB Engine API 从 Python 环境调用 MATLAB,从而将 MATLAB 工具和应用程序集成到您现有的 Python 工作流中。MATLAB 方便地使用低代码应用程序标记和探索特定于领域的(例如雷达、无线、音频和生物医学)信号处理数据。例如,请参阅我们的 GitHub 仓库 用于训练语音命令识别系统的协同执行

结论

底线是 TensorFlow 和 MATLAB 都提供了出色的工具,使您能够将深度学习应用到您的应用程序中。MATLAB 与 TensorFlow 集成,以充分利用这些工具并使您能够访问数百种深度学习模型。在互操作性功能(在 TensorFlow 和 MATLAB 之间转换模型,或一起使用 TensorFlow 和 MATLAB)之间进行选择,以创建跨平台和团队的深度学习工作流。

如果您对如何、何时以及为什么要使用所描述的互操作性有任何疑问,请发送电子邮件至 [email protected]。我很乐意详细了解您的工作流,并讨论跨深度学习平台工作如何加速将深度学习应用于您的领域。

下一篇文章
TensorFlow with MATLAB

由 MathWorks 产品营销经理 Sivylla Paraskevopoulou 发布在本博文中,我将向您展示如何在深度学习应用程序中使用 TensorFlow™ 与 MATLAB®。更具体地说,我将向您展示如何将预先训练的 TensorFlow 模型转换为 MATLAB 模型,将 MATLAB 模型转换为 TensorFlow 模型,以及将 MATLAB 和 TensorFlow 结合使用。MATLAB 提供的这些互操作性功能……