主要内容

importNetworkFromPyTorch

进口PyTorch模型MATLAB网络

自从R2022b

    描述

    例子

    = importNetworkFromPyTorch (modelfile)进口PyTorch pretrained和跟踪®模型从文件modelfile。函数的作用是:返回网络作为一个未初始化的dlnetwork对象。

    importNetworkFromPyTorch要求深度学习工具箱™转换器PyTorch模型金宝app支持包。如果这种支持包没金宝app有安装importNetworkFromPyTorch提供一个下载链接。

    请注意

    importNetworkFromPyTorch函数可能会生成一个自定义层当PyTorch转换层。有关更多信息,请参见算法。保存生成的功能定义层包+modelfile

    例子

    = importNetworkFromPyTorch (modelfilePackageName =CustomLayersPackage)从PyTorch进口pretrained网络并保存生成的自定义在包层和相关功能+CustomLayersPackage

    例子

    全部折叠

    导入一个pretrained和追踪PyTorch模型作为一个未初始化的dlnetwork对象。然后,添加一个输入层到进口网络。

    本例中导入MNASNet(版权©Soumith Chintala 2016) PyTorch模型。MNASNet是一个图像分类模型与图像训练ImageNet数据库。下载mnasnet1_0.pt文件,大约17 MB的大小,从MathWorks网站。

    modelfile = matlab.internal.examples.download金宝appSupportFile (“nnet”,“数据/ PyTorchModels / mnasnet1_0.pt”);

    通过使用导入MNASNet模型importNetworkFromPyTorch函数。作为一个未初始化的函数导入模型dlnetwork对象没有一个输入层。软件上显示一个警告,提供你信息输入层的数量,类型的输入层添加什么,如何添加一个输入层。

    净= importNetworkFromPyTorch (modelfile)
    警告:网络作为一个未初始化的dlnetwork进口。使用网络之前,添加输入层(s): inputLayer1 = imageInputLayer (< inputSize1 >、规范化= "没有");网= addInputLayer(净、inputLayer1初始化= true);
    网= dlnetwork属性:层:[152×1 nnet.cnn.layer.Layer]连接:[163×2表]可学的:(210×3表)状态:[104×3表]InputNames: {“TopLevelModule_layers_0”} OutputNames: {“aten__linear12”}初始化:0观点总结总结。

    指定的输入规模进口网络和创建一个图像输入层。然后,添加图像输入层网络和初始化网络通过使用进口addInputLayer函数。

    InputSize = (224 224 3);inputLayer = imageInputLayer (InputSize正常化=“没有”);网= addInputLayer(净、inputLayer初始化= true);

    分析了进口网络输入层和视图。预测的网络已经可以使用了。

    analyzeNetwork(净)

    analyzenetwork_addinputlayer.png

    导入一个pretrained和追踪PyTorch模型作为一个未初始化的dlnetwork对象。然后,初始化导入网络。

    本例中导入MNASNet(版权©Soumith Chintal 2016) PyTorch模型。MNASNet是一个图像分类模型与图像训练ImageNet数据库。Dowload的mnasnet1_0.pt文件,大约17 MB的大小,从MathWorks网站。

    modelfile = matlab.internal.examples.download金宝appSupportFile (“nnet”,“数据/ PyTorchModels / mnasnet1_0.pt”);

    通过使用导入MNASNet模型importNetworkFromPyTorch函数。作为一个未初始化的函数导入模型dlnetwork对象。

    净= importNetworkFromPyTorch (modelfile)
    警告:网络作为一个未初始化的dlnetwork进口。使用网络之前,添加输入层(s): inputLayer1 = imageInputLayer (< inputSize1 >、规范化= "没有");网= addInputLayer(净、inputLayer1初始化= true);
    网= dlnetwork属性:层:[152×1 nnet.cnn.layer.Layer]连接:[163×2表]可学的:(210×3表)状态:[104×3表]InputNames: {“TopLevelModule_layers_0”} OutputNames: {“aten__linear12”}初始化:0观点总结总结。

    指定的输入规模进口网络。然后,创建一个随机的dlarray对象代表了网络的输入。的数据格式dlarray对象必须有尺寸“SSCB”(空间、空间、通道、批处理)来表示一个二维图像的输入。有关更多信息,请参见数据格式与dlnetwork预测

    InputSize = (224 224 3);X = dlarray(兰德(InputSize),“SSCB”);

    初始化的可学的参数导入网络使用初始化函数。

    网=初始化(净,X);

    现在进口网络可以用于预测。分析了进口网络。

    analyzeNetwork(净)

    analyzenetwork_initialize.png

    导入一个pretrained和追踪PyTorch模型作为一个未初始化的dlnetwork对象对一个图像进行分类。

    本例中导入MNASNet(版权©Soumith Chintala 2016) PyTorch模型。MNASNet是一个图像分类模型与图像训练ImageNet数据库。下载mnasnet1_0.pt文件,大约17 MB的大小,从MathWorks网站。

    modelfile = matlab.internal.examples.download金宝appSupportFile (“nnet”,“数据/ PyTorchModels / mnasnet1_0.pt”);

    通过使用导入MNASNet模型importNetworkFromPyTorch函数。作为一个未初始化的函数导入模型dlnetwork对象。

    净= importNetworkFromPyTorch (modelfile)
    警告:网络作为一个未初始化的dlnetwork进口。使用网络之前,添加输入层(s): inputLayer1 = imageInputLayer (< inputSize1 >、规范化= "没有");网= addInputLayer(净、inputLayer1初始化= true);
    网= dlnetwork属性:层:[152×1 nnet.cnn.layer.Layer]连接:[163×2表]可学的:(210×3表)状态:[104×3表]InputNames: {“TopLevelModule_layers_0”} OutputNames: {“aten__linear12”}初始化:0观点总结总结。

    指定的输入规模进口网络和创建一个图像输入层。然后,添加图像输入层网络和初始化网络通过使用进口addInputLayer函数。

    InputSize = (224 224 3);inputLayer = imageInputLayer (InputSize正常化=“没有”);网= addInputLayer(净、inputLayer初始化= true);

    读你想要的图像分类。

    我= imread (“peppers.png”);

    调整图像的输入规模网络。显示图像。

    InputSize = (224 224 3);我= imresize (Im, InputSize (1:2));imshow (Im)

    输入MNASNet需要进一步的预处理。重新调节图像。然后,标准化图像训练图像减去均值和标准差除以训练图像。有关更多信息,请参见输入数据预处理

    我=重新调节(Im 0 1);meanIm = (0.485 0.456 0.406);stdIm = (0.229 0.224 0.225);我= (Im -重塑(meanIm [1 1 3]))。/重塑(stdIm [1 1 3]);

    将图像转换为一个dlarray对象。格式的图像尺寸“SSCB”(空间、空间、通道、批)。

    Im_dlarray = dlarray(单(Im),“SSCB”);

    得到的类名squeezenet,这也是训练ImageNet图像。

    squeezeNet = squeezeNet;一会= squeezeNet.Layers . class(结束);

    图像进行分类,找到预测的标签。

    概率=预测(净,Im_dlarray);[~,label_ind] = max(概率);

    显示分类的结果。

    类名(label_ind)
    ans =分类甜椒

    导入一个pretrained和追踪PyTorch模型作为一个未初始化的dlnetwork对象。然后,找到该软件生成的自定义层。

    下面的例子使用了findCustomLayershelper函数。

    本例中导入MNASNet(版权©Soumith Chintala 2016) PyTorch模型。MNASNet是一个图像分类模型与图像训练ImageNet数据库。下载mnasnet1_0.pt文件,大约17 MB的大小,从MathWorks网站。

    modelfile = matlab.internal.examples.download金宝appSupportFile (“nnet”,“数据/ PyTorchModels / mnasnet1_0.pt”);

    通过使用导入MNASNet模型importNetworkFromPyTorch函数。作为一个未初始化的函数导入模型dlnetwork对象。

    网= importNetworkFromPyTorch (modelfile);
    警告:网络作为一个未初始化的dlnetwork进口。使用网络之前,添加输入层(s): inputLayer1 = imageInputLayer (< inputSize1 >、规范化= "没有");网= addInputLayer(净、inputLayer1初始化= true);

    importNetworkFromPyTorch函数生成自定义层的PyTorch层函数不能转换为内置的MATLAB层或函数。有关更多信息,请参见算法。保存的软件自动生成自定义层的包+ mnasnet1_0在当前文件夹和分包的相关功能+行动。看到自定义层和相关函数,检查包裹。

    custom_layers_package.png

    你还可以找到生成自定义的指标层使用findCustomLayershelper函数。显示自定义层。

    印第安纳州= findCustomLayers (net.Layers,' + mnasnet1_0 ');net.Layers(印第安纳州)
    ans = 13×1层与层:数组1 aten__add0 mnasnet1_0定制层。mnasnet1_0 aten__add0 2“aten__add1”自定义层。mnasnet1_0 aten__add1 3 ' aten__add2 '自定义层。mnasnet1_0 aten__add2 4“aten__add3”自定义层。mnasnet1_0 aten__add3 5“aten__add4”自定义层。mnasnet1_0 aten__add4 6“aten__add5”自定义层。mnasnet1_0 aten__add5 7“aten__add6”自定义层。mnasnet1_0 aten__add6 8“aten__add7”自定义层。mnasnet1_0 aten__add7 9“aten__add8”自定义层。mnasnet1_0 aten__add8 10“aten__add9”自定义层。mnasnet1_0 aten__add9 11“aten__dropout_11”自定义层。mnasnet1_0 aten__dropout_11 12“aten__linear12”自定义层。aten__linear1213 'aten__mean10' Custom Layer mnasnet1_0.aten__mean10

    Helper函数

    本节提供了findCustomLayershelper函数,它返回指数自定义层importNetworkFromPyTorch自动生成。

    函数指数= findCustomLayers(层,PackageName) s = ([‘。’PackageName]);指数= 0(1、长度(小);i = 1:长度(层)j = 1:长度(小)如果strcmpi(类(层(i)), [PackageName(2:结束)“。”s.m {j} (1: end-2)])指数(j) =我;结束结束结束结束

    这个例子展示了如何从PyTorch进口网络和训练网络分类的新图像。使用importNetworkFromPytorch作为一个未初始化的函数导入网络dlnetwork对象。列车网络通过使用自定义训练循环。

    下面的例子使用了modelLoss,modelPredictions,preprocessMiniBatchPredictors辅助功能。

    这个示例提供了支持文件金宝appnew_fcLayer.m。访问支持文件,打开生活中的例金宝app子编辑器。

    加载数据

    解压MerchData数据集,其中包含75张图片。加载新的图像,图像数据存储。的imageDatastore函数自动标签图像基于文件夹的名字和存储数据作为ImageDatastore对象。将数据分为训练和验证数据集。使用70%的图片,培训为30%,验证。

    解压缩(“MerchData.zip”);imd = imageDatastore (“MerchData”,IncludeSubfolders = true,LabelSource =“foldernames”);[imdsTrain, imdsValidation] = splitEachLabel (imd, 0.7);

    在本例中使用的网络需要输入的图像大小224 - 224 - 3。自动调整训练图像,使用一个增强图像数据存储。指定额外增加操作执行培训图片:随机翻译30像素的图像在水平和垂直轴。数据增加有助于防止网络过度拟合和记忆的训练图像的细节。

    inputSize = (224 224 3);pixelRange = 30 [-30];scaleRange = (0.9 - 1.1);imageAugmenter = imageDataAugmenter (RandXReflection = true,RandXTranslation = pixelRange,RandYTranslation = pixelRange,RandXScale = scaleRange,RandYScale = scaleRange);augimdsTrain = augmentedImageDatastore (inputSize (1:2), imdsTrain,DataAugmentation = imageAugmenter);

    自动调整验证图像不执行进一步的数据,使用一个增强的图像数据存储不指定任何额外的预处理操作。

    augimdsValidation = augmentedImageDatastore (inputSize (1:2), imdsValidation);

    确定训练数据的类的数量。

    类=类别(imdsTrain.Labels);numClasses =元素个数(类);

    进口网络

    下载MNASNet(版权©Soumith Chintala 2016) PyTorch模型。MNASNet是一个图像分类模型与图像训练ImageNet数据库。下载mnasnet1_0.pt文件,大约17 MB的大小,从MathWorks网站。

    modelfile = matlab.internal.examples.download金宝appSupportFile (“nnet”,“数据/ PyTorchModels / mnasnet1_0.pt”);

    导入MNASNet模型作为一个未初始化的dlnetwork对象,通过使用importNetworkFromPyTorch函数。

    净= importNetworkFromPyTorch (modelfile)
    警告:网络作为一个未初始化的dlnetwork进口。使用网络之前,添加输入层(s): inputLayer1 = imageInputLayer (< inputSize1 >、规范化= "没有");网= addInputLayer(净、inputLayer1初始化= true);
    网= dlnetwork属性:层:[152×1 nnet.cnn.layer.Layer]连接:[163×2表]可学的:(210×3表)状态:[104×3表]InputNames: {“TopLevelModule_layers_0”} OutputNames: {“aten__linear12”}初始化:0观点总结总结。

    显示导入的网络的最后一层。

    net.Layers(结束)
    ans = aten__linear12属性:名称:“aten__linear12”NumInputs: 2 InputNames: {’’‘in_rank} TopLevelModule_classifier_1_weight可学的参数:[1280×1000单]TopLevelModule_classifier_1_bias: [0.0493 -0.0804 -0.0906 -0.1006 0.1332 -0.0767 -0.0788 -0.0026 -0.0525 -0.1215 -0.1635 -0.1147 -0.1421 -0.1148 -0.0586 -0.2150 -0.0970 -0.0798 -5.4136 e-04 -0.0968 0.0479 0.0780 0.0015 -0.1375 -0.0485 -0.1223…]状态参数没有属性。显示所有属性

    aten__linear12层是一个自定义层生成的importNetworkFromPyTorch函数最后可学的进口网络的层。这一层包含的信息如何结合网络特性,提取类概率和损失价值。

    取代最后一层

    再培训导入网络分类的新图像,用一个新的替换最后一层完全连接层。新层new_fclayer适应新的数据集,还必须是一个自定义层,因为它有两个输入。

    初始化new_fcLayer层和替换aten__linear12层与new_fcLayer

    newLayer = new_fcLayer (“fc1”,“自定义层”,{“在”“in_rank”},{“出”},numClasses);网= replaceLayer(网络,“aten__linear12”,newLayer);

    softmax层添加到网络和连接将softmax层新完全连接层。

    网= addLayers(净,softmaxLayer (Name =“sm1”));网= connectLayers(网络,“fc1”,“sm1”);

    添加输入层

    添加一个图像输入到网络层和初始化网络。

    inputLayer = imageInputLayer (inputSize正常化=“没有”);网= addInputLayer(净、inputLayer初始化= true);

    分析了网络。查看第一层和最后一层。

    analyzeNetwork(净)

    analyzenetwork_inputlayer.png

    analyzenetwork_finallayers.png

    定义模型损失函数

    训练一个深层神经网络是一种优化的任务。通过考虑一个神经网络作为一个函数 f ( X ; θ ) ,在那里 X 网络的输入, θ 可学的参数集,您可以优化吗 θ 减少一些损失值基于训练数据。例如,优化可学的参数 θ 这样,对于给定输入 X 与相应的目标 T ,他们之间的误差最小化预测 Y = f ( X ; θ ) T

    创建modelLoss函数,列出的损失函数模型部分的例子,作为输入dlnetwork对象和一个mini-batch输入数据与相应的目标。函数返回的损失,损失的梯度对可学的参数,和网络状态。

    指定培训选项

    火车15世mini-batch大小为20。

    numEpochs = 15;miniBatchSize = 20;

    指定的选项个优化。指定一个初始学习衰变率0.001,0.005,和0.9的动力。

    initialLearnRate = 0.001;衰变= 0.005;动量= 0.9;

    火车模型

    创建一个minibatchqueue对象流程和管理mini-batches图像在训练。为每个mini-batch:

    • 使用自定义mini-batch预处理功能preprocessMiniBatch(在这个例子中定义)转换编码的标签在一个炎热的变量。

    • 格式的图像数据维度标签“SSCB”(空间、空间、通道、批)。默认情况下,minibatchqueue把数据转换为对象dlarray潜在的对象类型。没有格式的类标签。

    • 火车在GPU如果一个是可用的。默认情况下,minibatchqueue将每个输出转换为对象gpuArray对象如果GPU可用。使用GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)

    兆贝可= minibatchqueue (augimdsTrain,MiniBatchSize = MiniBatchSize,MiniBatchFcn = @preprocessMiniBatch,MiniBatchFormat = [“SSCB””“]);

    初始化与动量梯度下降的速度参数解算器(个)。

    速度= [];

    计算迭代的总数的培训进度监控。

    numObservationsTrain =元素个数(imdsTrain.Files);numIterationsPerEpoch =装天花板(numObservationsTrain / miniBatchSize);numIterations = numEpochs * numIterationsPerEpoch;

    初始化trainingProgressMonitor对象。因为计时器开始创建监视器对象时,训练循环后立即创建对象。

    监控= = trainingProgressMonitor(指标“损失”信息= (“时代”,“LearnRate”),包含=“迭代”);

    列车网络使用自定义训练循环。对于每一个时代,洗牌和遍历mini-batches数据的数据。为每个mini-batch:

    • 损失评估模型,使用渐变和状态dlfevalmodelLoss功能和更新网络状态。

    • 确定基于时间的学习速率衰减学习速率的时间表。

    • 更新网络参数使用sgdmupdate函数。

    • 更新损失,学习速度,训练进度监控和时代价值。

    • 停止,如果停止房地产是正确的。的停止属性值的TrainingProgressMonitor对象的变化真正的当你点击停止按钮。

    时代= 0;迭代= 0;%循环时期。时代< numEpochs & & ~班长。停止时代=时代+ 1;%洗牌数据。洗牌(兆贝可);%在mini-batches循环。hasdata(兆贝可)& & ~班长。停止iteration = iteration + 1;% mini-batch读取的数据。[X, T] =下一个(兆贝可);%评估模型梯度、州和使用dlfeval和损失% modelLoss功能和更新网络状态。(损失、渐变、状态)= dlfeval (@modelLoss,净,X, T);网。=状态;%确定为基于时间的学习速率衰减学习速率的时间表。learnRate = initialLearnRate /(1 +衰变*迭代);%更新使用个优化网络参数。(净、速度)= sgdmupdate(净、渐变速度,learnRate动量);%更新培训进度监控。recordMetrics(监控、迭代损失=损失);updateInfo(监控、时代=时代LearnRate = LearnRate);班长。进步= 100 *迭代/ numIterations;结束结束

    验证图像进行分类

    测试模型的分类精度比较预测验证集和真正的标签。

    训练后,使预测新数据不需要标签。创建一个minibatchqueue对象只包含测试数据的预测:

    • 忽略标签测试,设置输出的数量mini-batch队列1。

    • 指定相同的mini-batch大小用于培训。

    • 预处理预测使用preprocessMiniBatchPredictors函数,列出的例子。

    • 对于单一的输出数据存储,指定mini-batch格式“SSCB”(空间、空间、通道、批)。

    numOutputs = 1;mbqTest = minibatchqueue (augimdsValidation numOutputs,MiniBatchSize = MiniBatchSize,MiniBatchFcn = @preprocessMiniBatchPredictors,MiniBatchFormat =“SSCB”);

    循环mini-batches和使用的图像进行分类modelPredictions函数,列出的例子。

    欧美= modelPredictions(净、mbqTest、类);

    评估分类精度。

    tt = imdsValidation.Labels;精度=意味着(tt = =次)
    精度= 0.9500

    图表可视化预测在一个混乱。大值对应的类的对角线显示准确的预测。大值对应的类之间的非对角的表示强烈的困惑。

    次图confusionchart (tt)

    辅助函数

    损失函数模型

    modelLoss函数作为输入dlnetwork对象和mini-batch输入数据X与相应的目标T。函数返回的损失,损失的梯度参数对可学的,和网络状态。自动计算梯度,使用dlgradient函数。

    函数(损失、渐变、状态)= modelLoss(净,X, T)%通过网络转发数据。[Y,状态]=前进(净,X);%计算熵的损失。损失= crossentropy (Y, T);%计算梯度的损失对可学的参数。梯度= dlgradient(损失、net.Learnables);结束

    模型的预测函数

    modelPredictions函数作为输入dlnetwork对象,一个minibatchqueue的输入数据兆贝可和网络类。函数计算模型预测的循环遍历所有的数据minibatchqueue对象。这个函数使用onehotdecode函数找到预测类最高的分数。

    函数Y = modelPredictions(净、兆贝可类)Y = [];%在mini-batches循环。hasdata(兆贝可)X =(兆贝可);%进行预测。成绩=预测(净,X);%解码标签和附加到输出。标签= onehotdecode(成绩、类1)';Y = [Y;标签);结束结束

    小批预处理功能

    preprocessMiniBatch函数进行预处理的mini-batch预测和标签使用这些步骤:

    1. 使用预处理的图像preprocessMiniBatchPredictors函数。

    2. 从传入单元阵列提取标签数据和连接到一个直言沿着二维数组。

    3. 一个炎热的分类标签编码成数字数组。编码的第一个维度产生一个相匹配的形状编码阵列网络输出。

    函数[X, T] = preprocessMiniBatch (dataX人数()%预处理预测。X = preprocessMiniBatchPredictors (dataX);%从细胞中提取标签数据和连接。猫(T = 2,人数({1:结束});%一个炎热的编码标签。T = onehotencode (T, 1);结束

    Mini-Batch预测预处理功能

    preprocessMiniBatchPredictors函数进行预处理mini-batch预测因子的提取图像数据从输入单元阵列和连接到一个数字数组。灰度输入,连接在第四维度添加了一个三维图像使用作为一个单通道尺寸。

    函数X = preprocessMiniBatchPredictors (dataX)%连接。猫(X = 4, dataX{1:结束});结束

    输入参数

    全部折叠

    包含网络PyTorch模型文件的名称,指定为一个特征向量或字符串标量。文件必须在当前文件夹或文件夹在MATLAB®路径,或您必须包括一个完整的文件的相对路径。PyTorch模型必须pretrained和跟踪在一个推理迭代。

    如何跟踪PyTorch模型的信息,明白了https://pytorch.org/docs/stable/generated/torch.jit.trace.html

    例子:“mobilenet_v3.pt”

    的包的名称importNetworkFromPyTorch保存自定义图层,指定为一个特征向量或字符串标量。importNetworkFromPyTorch保存自定义层包+ CustomLayersPackage在当前文件夹。如果你不指定CustomLayersPackage,然后importNetworkFromPyTorch保存自定义层包命名+modelfile在当前文件夹。关于包的更多信息,请参阅包创建名称空间

    看到算法当信息importNetworkFromPyTorch函数生成一个自定义层。自定义生成的函数保存每个层到一个单独的程序文件+CustomLayersPackage。查看或编辑自定义图层,打开相关的程序文件。自定义层的更多信息,见自定义图层

    这个包+CustomLayersPackage也可以包含分包+行动。这个分包包含自动生成自定义层使用MATLAB函数。importNetworkFromPyTorch节省每一个MATLAB函数在一个单独的程序文件分装+行动。对象的功能dlnetwork,如预测函数,与自定义层交互时使用这些函数。分装的+行动也可能包含占位符函数

    例子:“mobilenet_v3”

    输出参数

    全部折叠

    Pretrained PyTorch网络,作为一个未初始化的返回dlnetwork对象。使用进口网络之前,您必须添加一个输入层或初始化网络。有关示例,请参见从PyTorch并添加进口网络输入层从PyTorch并初始化导入网络

    限制

    • importNetworkFromPyTorch功能完全支持1.10.0 Py金宝appTorch版本。该函数可以导入其他PyTorch版本中创建的大多数模型。

    • importNetworkFromPyTorch函数只能导入图像分类和分割模型。

    • 您可以运行importNetworkFromPyTorch在Windows®Mac OS平台。

    更多关于

    全部折叠

    转换PyTorch层和功能内置MATLAB层和功能

    importNetworkFromPyTorch函数支持PyTor金宝appch层、函数和运营商在这一节中列出的转换成内置MATLAB层和功能dlarray金宝app支持。有关函数操作的更多信息dlarray对象,看到与dlarray支持函数的列表金宝app。你可以观察的局限性转换。

    转换PyTorch

    此表显示了PyTorch层和深度学习工具箱层之间的通信。在某些情况下,当importNetworkFromPyTorch不能PyTorch层转换成一个MATLAB层,软件PyTorch层转换成深度学习工具箱函数dlarray金宝app支持。

    PyTorch层 相应的深度学习工具箱层 替代深度学习工具箱函数
    torch.nn.AdaptiveAvgPool2d nnet.pytorch.layer.AdaptiveAveragePoolingLayer pyAdaptiveAvgPool2d
    torch.nn.AvgPool2d averagePooling2dLayer 不适用
    torch.nn.BatchNorm2d batchNormalizationLayer 不适用
    torch.nn.Conv1d convolution1dLayer pyConvolution
    torch.nn.Conv2d convolution2dLayer 不适用
    torch.nn.ConvTranspose1d transposedConv1dLayer pyConvolution
    torch.nn.Dropout dropoutLayer 不适用
    torch.nn.GroupNorm groupNormalizationLayer 不适用
    torch.nn.LayerNorm layerNormalizationLayer 不适用
    torch.nn.Linear fullyConnectedLayer pyLinear
    torch.nn.MaxPool2d maxPooling2dLayer 不适用
    torch.nn.PReLU nnet.pytorch.layer.PReLULayer 不适用
    torch.nn.ReLU reluLayer 线性整流函数(Rectified Linear Unit)
    torch.nn.SiLU swishLayer pySilu
    torch.nn.Sigmoid sigmoidLayer pySigmoid
    torch.nn.Softmax nnet.pytorch.layer.SoftmaxLayer pySoftmax
    torch.nn.Upsample resize2dLayer(图像处理工具箱) pyUpsample(需要图像处理工具箱™)
    torch.nn.UpsamplingNearest2d resize2dLayer(图像处理工具箱) pyUpsample(需要图像处理工具箱)
    torch.nn.UpsamplingBilinear2d resize2dLayer(图像处理工具箱) pyUpsample(需要图像处理工具箱)
    转换PyTorch功能

    此表显示了PyTorch函数和深度学习工具箱函数之间的通信。

    PyTorch函数 相应的深度学习工具箱函数
    torch.nn.functional.avg_pool2d pyAvgPool2d
    torch.nn.functional.conv1d pyConvolution
    torch.nn.functional.conv2d pyConvolution
    torch.nn.functional.hardsigmoid pyAdaptiveAvgPool2d
    torch.nn.functional.dropout pyDropout
    torch.nn.functional.hardsigmoid pyHardSigmoid
    torch.nn.functional.hardswish pyHardSwish
    torch.nn.functional.linear pyLinear
    torch.nn.functional.log_softmax pyLogSoftmax
    torch.nn.functional.max_pool2d pyMaxPool2d
    torch.nn.functional.relu pyHardTanh
    torch.nn.functional.silu pySilu
    torch.nn.functional.softmax pySoftmax
    转换PyTorch数学运算符

    这个表显示PyTorch数学之间的通信运营商和深度学习工具箱函数。为PyTorch运营商,importNetworkFromPyTorch首先尝试将它转换成一个连接层和另外一个函数。

    PyTorch运营商 相应的深度学习工具箱层或函数 替代深度学习工具箱函数
    +,- - - - - -,*,/ pyElementwiseBinary 不适用
    torch.argmax pyArgMax 不适用
    torch.bmm pyMatMul 不适用
    torch.cat concatenationLayer pyConcat
    torch.chunk pyChunk 不适用
    torch.concat pyConcat 不适用
    torch.matmul pyMatMul 不适用
    torch.max pyMaxBinary / pyMaxUnary 不适用
    torch.mean pyMean 不适用
    torch.permute pyPermute 不适用
    torch.pow pyElementwiseBinary 不适用
    torch.reshape pyView 不适用
    torch.size pySize 不适用
    torch.split pySplitWithSizes 不适用
    torch.stack pyStack 不适用
    torch.sum pySum 不适用
    torch.squeeze pySqueeze 不适用
    torch.transpose pyTranspose 不适用
    torch.unsqueeze pyUnsqueeze 不适用
    torch.zeros pyZeros 不适用
    转换PyTorch矩阵运算符

    这个表格展示了PyTorch矩阵之间的通信运营商和深度学习工具箱函数。

    PyTorch运营商 相应的深度学习工具箱函数或运算符
    索引(例如,X (: 1)) pySlice
    torch.tensor.contiguous =
    torch.tensor.expand pyExpand
    torch.tensor.expand_as pyExpandAs
    torch.tensor.select pySlice
    torch.tensor.view pyView

    占位符函数

    importNetworkFromPyTorch函数不能PyTorch层转换成一个内置的MATLAB层或生成一个自定义层与MATLAB函数有关,一个占位符的函数创建一个自定义层的功能。之前你必须完成占位符函数可以使用网络。

    这个代码片段显示了定义一个自定义层的占位符的功能pyAtenUn金宝appsupportedOperator

    classdefUn金宝appsupportedOperator < nnet.layer.Layer函数[输出]=预测(obj __arg1)阿托恩%占位符函数::< unsupportedOperator >金宝app输出= pyAtenUnsupp金宝apportedOperator (__arg1、params);结束结束

    提示

    • 使用pretrained网络预测或转让学习新的图片,你必须进行预处理图像以同样的方式用于火车导入模型的图像预处理。最常见的预处理步骤调整图片大小,图像减去平均值,将图像从BGR格式转换为RGB格式。

      • 调整图像,使用imresize。例如,[3]227227年imresize(图片)

      • 将图像从RGB到BGR格式,使用翻转。例如,翻转(图片3)

      更多信息预处理图像进行训练和预测,明白了预处理图像深度学习

    • 包的成员+PackageName无法访问如果包父文件夹不是MATLAB路径。有关更多信息,请参见包和MATLAB的道路

    • MATLAB使用集中的索引,而Python®使用从零开始的索引。换句话说,在数组第一个元素的索引1和0在MATLAB和Python,分别。MATLAB索引的更多信息,请参阅数组索引。在MATLAB中,使用数组索引(印第安纳州)在Python中,创建数组转换为印第安纳州+ 1

    • 更多的技巧,明白了建议从TensorFlow进口模型,PyTorch ONNX

    算法

    importNetworkFromPyTorch一层PyTorch导入MATLAB函数通过这些步骤为:

    1. 函数试图导入PyTorch层作为一个内置的MATLAB层。有关更多信息,请参见PyTorch转换层

    2. 函数试图导入PyTorch层作为一个内置的MATLAB函数。有关更多信息,请参见PyTorch转换层

    3. 函数试图导入PyTorch层作为一个自定义层。importNetworkFromPyTorch保存生成的自定义在包层和相关的功能+modelfile。例如,看到的从PyTorch进口网络并找到生成自定义层

    4. 函数导入PyTorch层作为一个自定义层与一个占位符的功能。有关更多信息,请参见占位符函数

    在前三个情况下,进口后准备预测网络初始化。

    版本历史

    介绍了R2022b