摘要:本文介绍了TensorFlow与MATLAB协同使用的方法,主要包括三种方式:1) 将TensorFlow模型转换为MATLAB模型;2) 将MATLAB模型转换为TensorFlow模型;3) 通过Python与MATLAB互调实现协同运行。文章详细讲解了模型转换的技术细节,并展示了在图像分类、迁移学习和系统仿真等场景中的应用案例。这种跨平台协作方式能充分发挥两者的优势,为深度学习开发提供更灵活的工作流。

目录

TensorFlow 与 MATLAB 协同使用

一、引言

什么是 MATLAB?

为何选择 TensorFlow 与 MATLAB 协同使用?

二、将 TensorFlow 模型转换为 MATLAB 模型

模型转换步骤

图像分类实现

迁移学习

在 Simulink 中进行人工智能系统设计

三、将 MATLAB 模型转换为 TensorFlow 模型

构建未训练模型

导出模型至 TensorFlow

训练 TensorFlow 模型

四、TensorFlow 与 MATLAB 协同运行

在 MATLAB 中调用 Python

在 Python 中调用 MATLAB

五、总结


TensorFlow 与 MATLAB 协同使用

在本篇博文中,我将为大家介绍如何将 TensorFlow™ 与 MATLAB® 结合,应用于深度学习开发场景。具体而言,我会演示如何将预训练的 TensorFlow 模型转换为 MATLAB 模型、将 MATLAB 模型转换为 TensorFlow 模型,以及实现两者的协同使用。

MATLAB 提供的这些互操作功能,能让使用不同平台的同事、团队和开发者社区实现协作。本文将为大家讲解这些功能的使用方法,并结合实际场景举例说明其适用场景,以及如何通过这些功能连接人工智能开发人员与工程师,助力面向特定领域的人工智能系统设计。

一、引言

什么是 MATLAB?

MATLAB 是一款专为工程和科学领域应用打造的计算平台,可用于数据分析、信号与图像处理、控制系统、无线通信、机器人技术等多个方向。MATLAB 集成了专属编程语言、交互式应用程序,以及可自动生成嵌入式代码的工具,同时也是 Simulink® 的基础 ——Simulink 是一款用于模拟复杂多领域系统的框图环境。

与 Python® 库类似,MATLAB 也提供了实现不同功能的工具箱,其中深度学习工具箱™ 专为深度学习工作流打造。该工具箱提供了一套框架,可通过算法、预训练模型和应用程序设计与实现深度神经网络,还能与计算机视觉、信号处理、音频应用等特定领域的工具箱结合使用。

为何选择 TensorFlow 与 MATLAB 协同使用?

TensorFlow 和 MATLAB 均被广泛应用于深度学习领域。许多 MATLAB 用户希望将 TensorFlow 模型集成到自身的人工智能设计中,以打造定制化工具、模拟复杂系统或优化数据建模;而 TensorFlow 用户也可借助 MATLAB 实现训练数据的生成、分析与可视化,对模型输出进行后处理,并将训练好的神经网络部署到桌面端、网络应用或嵌入式硬件中。

例如,工程师已将 TensorFlow 模型集成到 Simulink(MATLAB 仿真环境)中,为电动汽车开发了电池荷电状态估算器;科学家则结合 MATLAB 与 TensorFlow 开发了一款自定义工具箱,用于读取气候数据。想了解这些案例的更多细节,可参考《将 TensorFlow 模型集成到 Simulink 中进行仿真和代码生成》以及《MATLAB 气候数据存储工具箱》相关文档。

接下来,我将为大家详细讲解 TensorFlow 与 MATLAB 协同使用的技术细节,主要分为三个部分:

  1. TensorFlow 模型转换为 MATLAB 模型
  2. MATLAB 模型转换为 TensorFlow 模型
  3. TensorFlow 与 MATLAB 协同运行

大家会发现,两者的结合使用十分便捷,这也是我和其他工程师都倾向于将二者结合用于深度学习应用的原因 —— 无需二选一,何不兼收并蓄?

二、将 TensorFlow 模型转换为 MATLAB 模型

可通过 MATLAB 函数 importTensorFlowNetwork,将预训练的 TensorFlow 模型转换为 MATLAB 模型。该函数的典型应用场景为:数据科学家在 TensorFlow 中完成模型构建后,工程师将该模型集成到基于 MATLAB 开发的人工智能系统中。

本文将演示如何将图像分类类 TensorFlow 模型导入 MATLAB,并实现两大功能:(1)利用该模型进行预测;(2)将其集成到人工智能系统中。

模型转换步骤

将预训练的 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");

图像分类实现

  1. 读取待分类图像,并将其调整为网络的输入尺寸:

matlab

Im = imread("mydoc.jpg");
InputSize = net.Layers(1).InputSize;
Im = imresize(Im,InputSize(1:2));

在进行图像分类前,可能需要对图像做进一步预处理,或将维度排序方式从 TensorFlow 格式转换为 MATLAB 格式。想了解模型导入的更多技巧和常见问题解答,可参考《TensorFlow 模型导入技巧》。

  1. 执行预测并绘制带有分类标签的图像:

matlab

label = classify(net,Im);
imshow(Im)
title("Predicted label: " + string(label));

想查看将图像分类类 TensorFlow 模型导入 MATLAB 并实现预测的完整案例,可参考《基于转换后的 TensorFlow 模型在 MATLAB 中实现图像分类》;想了解更多 TensorFlow 模型导入 MATLAB 的内容,可查阅博文《从 TensorFlow、PyTorch 和 ONNX 导入模型》。

迁移学习

将预训练的 TensorFlow 模型导入 MATLAB 的常见用途之一是实现迁移学习。迁移学习是指利用预训练的深度学习模型,通过微调使其适配新的任务场景。例如,在 MATLAB 中进行目标检测时,若发现某款 TensorFlow 模型能提升检测精度,即可通过迁移学习,使用自有数据对该模型重新训练 —— 这种方式通常比从零开始训练网络更高效、更简便。

在 MATLAB 中,可通过编程方式,或借助深度网络设计器(DND) 这款交互式应用实现迁移学习。通过 MATLAB 内置函数,仅需几行代码即可对网络架构的任意位置进行层的替换、删除或添加,轻松完成模型改造(为新数据训练做准备),相关案例可参考《训练深度学习网络实现新图像分类》。此外,还可通过深度网络设计器交互式完成网络训练准备、模型训练、重训练网络导出,最终将其应用于新任务,相关案例可参考《基于深度网络设计器的迁移学习》。

在 Simulink 中进行人工智能系统设计

Simulink 是一款框图环境,可用于基于多领域模型设计系统、在硬件落地前对系统进行仿真,以及无需编写代码即可完成部署。许多 Simulink 用户希望能将人工智能模型融入其中,实现全系统仿真,而借助 Simulink 模块,这一需求可轻松实现。

下图展示了一个简易的人工智能系统,该系统通过导入的 TensorFlow 模型读取并分类图像,其执行的工作流与前文所述完全一致。想了解此类系统的设计与仿真细节,可参考《借助导入的 TensorFlow 网络在 Simulink 中实现图像分类》。

当然,Simulink 的功能远不止对剪坏毛发的宠物狗进行品种识别。例如,可在 Simulink 模型中嵌入深度神经网络,实现车道和车辆检测,相关内容可参考《Simulink 与 NVIDIA Jetson 结合的机器学习应用》。

三、将 MATLAB 模型转换为 TensorFlow 模型

可通过 MATLAB 函数 exportNetworkToTensorFlow,将训练完成或未训练的 MATLAB 模型转换为 TensorFlow 模型。在 MATLAB 中,训练完成的模型被称为 “网络”,未训练的模型则被称为 “层图”。《预训练深度神经网络》文档页面详细介绍了获取预训练网络的所有方法,你也可以自行构建网络。

构建未训练模型

以构建双向长短期记忆(BiLSTM)网络为例,实现序列数据分类。LSTM 网络以序列数据为输入,基于序列数据的各个时间步进行预测。

MATLAB 代码实现:

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 中的训练数据。

  1. 加载模型:
import myModel
model = myModel.load_model()
  1. 加载训练数据:
import scipy.io as sio
data = sio.loadmat("training_data.mat")
XTrain = data["XTrain"]
YTrain = data["TTrain"]
  1. 编译并训练模型:
model.compile(optimizer = "adam", loss = "sparse_categorical_crossentropy", metrics=["accuracy"])
r = model.fit(XTrain, YTrain, epochs=100, batch_size=27)

四、TensorFlow 与 MATLAB 协同运行

前文已介绍了两者间的模型互转方法,此外,还可实现二者的协同运行(在同一环境中启动),具体可通过在 MATLAB 中调用 Python在 Python 中调用 MATLAB 两种方式实现。通过这种集成化的工作流,可充分发挥两个平台的各自优势。

例如,TensorFlow 可能会推出更新的模型,但你更青睐使用 MATLAB 的应用程序进行数据标注;或者你希望通过 MATLAB 的实验管理器应用,在多种初始条件下训练 TensorFlow 模型(参考相关案例)。

在 MATLAB 中调用 Python

无需将 TensorFlow 模型导入 MATLAB,可直接在 MATLAB 工作流中通过调用 Python 来使用 TensorFlow 模型。在 MATLAB 中,只需为 Python 库添加 py. 前缀即可调用,也可通过 pyrun 函数执行任意 Python 语句。想查看在 MATLAB 中调用 TensorFlow 模型的案例,可参考《在 MATLAB 中借助 TensorFlow 实现图像分类》。

该方式的典型应用场景:你已在 MATLAB 中搭建了目标检测工作流,希望在将最优模型导入 MATLAB 前,快速对比多款 TensorFlow 模型,找到最适配的一款 —— 此时可通过在 MATLAB 中调用 TensorFlow,快速完成推理测试。

在 Python 中调用 MATLAB

可借助MATLAB 引擎 API 在 Python 环境中调用 MATLAB,从而将 MATLAB 的工具和应用程序集成到现有的 Python 工作流中。MATLAB 的低代码应用程序可便捷地完成特定领域(如雷达、无线通信、音频、生物医学)的信号处理数据标注与探索,相关案例可参考我们的 GitHub 仓库《语音命令识别系统训练的协同执行方案》。

五、总结

总而言之,TensorFlow 和 MATLAB 均提供了优秀的工具,助力深度学习在各类实际应用中的落地。MATLAB 与 TensorFlow 的集成,能让开发者充分发挥两款工具的优势,获取数百种深度学习模型的使用权限。你可根据需求选择合适的互操作方式(模型互转或协同运行),打造跨平台、跨团队的深度学习工作流。

此域名禁用
全局禁用
Logo

助力广东及东莞地区开发者,代码托管、在线学习与竞赛、技术交流与分享、资源共享、职业发展,成为松山湖开发者首选的工作与学习平台

更多推荐