主要内容

importTensorFlowNetwork

进口pretrainedTensorFlow网络

    描述

    例子

    = importTensorFlowNetwork (modelFolder从文件夹中导入预先训练好的TensorFlow™网络modelFolder,其中包含保存的模型格式的模型(仅兼容TensorFlow 2)。该函数可以导入TensorFlow- keras顺序或函数API创建的TensorFlow网络。importTensorFlowNetwork类中定义的层saved_model.pb文件中所包含的学习权重变量子文件夹,并返回网络作为一个DAGNetworkdlnetwork对象。

    importTensorFlowNetwork要求深度学习工具箱™TensorFlow模型转换器金宝app支持包。如果没有安装此支金宝app持包,则importTensorFlowNetwork提供下载链接。

    请注意

    importTensorFlowNetwork当您导入自定义TensorFlow层或当软件无法将TensorFlow层转换为等效的内置MATLAB时,会尝试生成自定义层®层。有关软件支持转换的层的列表,请参见金宝appTensorFlow-Keras层支持转换为内置金宝appMATLAB层

    importTensorFlowNetwork将生成的自定义层和相关的TensorFlow操作符保存在包中+modelFolder

    importTensorFlowNetwork它不会为不支持转换为内置MATLAB层的每个TensorFlow层自动生成自定义层。金宝app有关如何处理不受支持的层的更多信息,请参见金宝app提示

    例子

    = importTensorFlowNetwork (modelFolder名称,值导入预先训练好的TensorFlow网络,使用一个或多个名称-值参数指定的附加选项。例如,“OutputLayerType”、“分类”导入网络为DAGNetwork在导入的网络体系结构的末尾附加一个分类输出层。

    例子

    全部折叠

    导入预先训练好的TensorFlow网络,以保存的模型格式作为DAGNetwork对象,并使用导入的网络对图像进行分类。

    指定模型文件夹。

    如果~ (“digitsDAGnet”“dir”)解压缩(“digitsDAGnet.zip”结束modelFolder =”。/ digitsDAGnet '

    指定类名。

    classNames = {' 0 '' 1 '' 2 '“3”“4”“5”“6”“7”“8”“9”};

    以保存的模型格式导入TensorFlow网络。默认情况下,importTensorFlowNetwork导入网络为DAGNetwork对象。指定图像分类问题的输出层类型。

    net = importTensorFlowNetwork(modelFolder,“OutputLayerType”“分类”“类”类名)
    导入已保存的模型…翻译模型,这可能需要几分钟……完成翻译。装配网络……导入完成。
    net = DAGNetwork with properties: Layers: [13×1 nnet.cnn.layer.Layer] Connections: [13×2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

    绘制网络架构图。

    情节(净)标题(“DAG网络架构”

    读取要分类的图像并显示图像的大小。该图像是一个大小为28 × 28像素的灰度(单通道)图像。

    digitDatasetPath = fullfile(toolboxdir(“nnet”),“nndemos”“nndatasets”“DigitDataset”);I = imread(fullfile(digitDatasetPath),“5”“image4009.png”));大小(我)
    ans =1×228日28日

    显示网络的输入大小。在这种情况下,图像大小与网络输入大小相匹配。如果它们不匹配,则必须使用imresize(我netInputSize (1:2))

    net.Layers (1) .InputSize
    ans =1×328 28 1

    使用预训练的网络对图像进行分类。

    标签=分类(net,I);

    显示图像和分类结果。

    imshow (I)标题([“分类结果”char(标签)))

    导入预先训练好的TensorFlow Network,以保存的模型格式作为dlnetwork对象,并使用导入的网络来预测类标签。

    指定模型文件夹。

    如果~ (“digitsDAGnet”“dir”)解压缩(“digitsDAGnet.zip”结束modelFolder =”。/ digitsDAGnet '

    指定类名。

    classNames = {' 0 '' 1 '' 2 '“3”“4”“5”“6”“7”“8”“9”};

    以保存的模型格式导入TensorFlow网络dlnetwork对象。

    net = importTensorFlowNetwork(modelFolder,“TargetNetwork”“dlnetwork”
    导入已保存的模型…翻译模型,这可能需要几分钟……完成翻译。装配网络……导入完成。
    net = dlnetwork with properties: Layers: [12×1 nnet.cnn.layer.Layer] Connections: [12×2 table] Learnables: [6×3 table] State: [0×3 table] InputNames: {'input_1'} OutputNames: {'activation_1'} Initialized: 1 .初始化

    读取要分类的图像并显示图像的大小。该图像是一个大小为28 × 28像素的灰度(单通道)图像。

    digitDatasetPath = fullfile(toolboxdir(“nnet”),“nndemos”“nndatasets”“DigitDataset”);I = imread(fullfile(digitDatasetPath),“5”“image4009.png”));大小(我)
    ans =1×228日28日

    显示网络的输入大小。在这种情况下,图像大小与网络输入大小相匹配。如果它们不匹配,则必须使用imresize(我netInputSize (1:2))

    netInputSize = net.Layers(1).InputSize
    netInputSize =1×328 28 1

    将图像转换为adlarray.用尺寸格式化图像“SSCB”(空间,空间,通道,批次)。在这种情况下,批处理大小为1,您可以省略它(SSC的).

    I_dlarray = dlarray(single(I)),“SSCB”);

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

    prob = predict(net,I_dlarray);[~,label] = max(prob);

    显示图像和分类结果。

    imshow (I)标题([“分类结果”一会{标签}])

    导入预先训练好的TensorFlow网络,以保存的模型格式作为DAGNetwork对象,并使用导入的网络对图像进行分类。导入的网络包含不支持转换为内置MATLAB层的层。金宝app当您导入这些层时,软件会自动生成自定义层。

    本例使用helper函数findCustomLayers.要查看此函数的代码,请参见Helper函数

    指定模型文件夹。

    如果~ (“digitsDAGnetwithnoise”“dir”)解压缩(“digitsDAGnetwithnoise.zip”结束modelFolder =”。/ digitsDAGnetwithnoise '

    指定类名。

    classNames = {' 0 '' 1 '' 2 '“3”“4”“5”“6”“7”“8”“9”};

    以保存的模型格式导入TensorFlow网络。默认情况下,importTensorFlowNetwork导入网络为DAGNetwork对象。指定图像分类问题的输出层类型。

    net = importTensorFlowNetwork(modelFolder,“OutputLayerType”“分类”“类”类名);
    导入已保存的模型…翻译模型,这可能需要几分钟……完成翻译。装配网络……导入完成。

    如果导入的网络包含不支持转换为内置MATLAB层的层,则金宝appimportTensorFlowNetwork可以自动生成自定义层来代替这些层。importTensorFlowNetwork将每个生成的自定义层保存为单独的.m包中的文件+ digitsDAGnetwithnoise在当前文件夹中。

    使用helper函数查找自动生成的自定义层的索引findCustomLayers,并显示自定义图层。

    ind = findCustomLayers(net。层,' + digitsDAGnetwithnoise ');net.Layers(印第安纳州)
    ans = 2×1带有层的层数组:1' gaussian_noise_1' GaussianNoise digitsDAGnetwithnoise。kGaussianNoise1Layer3766 2' gaussian_noise_2' GaussianNoise digitsDAGnetwithnoise.kGaussianNoise2Layer3791

    绘制网络架构图。

    情节(净)标题(“DAG网络架构”

    读取要分类的图像。

    digitDatasetPath = fullfile(toolboxdir(“nnet”),“nndemos”“nndatasets”“DigitDataset”);I = imread(fullfile(digitDatasetPath),“5”“image4009.png”));

    使用预训练的网络对图像进行分类。

    标签=分类(net,I);

    显示图像和分类结果。

    imshow (I)标题([“分类结果”char(标签)))

    Helper函数

    介绍helper函数的代码findCustomLayers本例中使用。findCustomLayers返回指数自定义层的importTensorFlowNetwork自动生成。

    函数index = findCustomLayers(layers,PackageName) s = what([‘。’PackageName]);索引= 0(1,长度(s.m));I = 1:长度(层数)J = 1:长度(s.m)如果strcmpi(类(层(i)), [PackageName(2:结束)“。”S.m {j}(1:end-2)]) index (j) = i;结束结束结束结束

    输入参数

    全部折叠

    包含TensorFlow模型的文件夹名称,指定为字符向量或字符串标量。modelFolder必须在当前文件夹中,或者必须包含文件夹的完整路径或相对路径。modelFolder必须包含文件saved_model.pb子文件夹变量.它还可以包含子文件夹资产而且assets.extra

    • 该文件saved_model.pb包含层图架构和训练选项(例如,优化器、损失和指标)。

    • 的子文件夹变量包含预训练TensorFlow网络学习到的权重。默认情况下,importTensorFlowNetwork导入权重。

    • 的子文件夹资产包含层图可以使用的补充文件(例如词汇表)。importTensorFlowNetwork不导入文件资产

    • 的子文件夹assets.extra包含补充文件(如用户信息),与层图共存。

    例子:“MobileNet”

    例子:”。/ MobileNet '

    名称-值参数

    的可选逗号分隔对名称,值参数。的名字参数名称和价值对应的值。的名字必须出现在引号内。您可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

    例子:importTensorFlowNetwork (modelFolder‘TargetNetwork’,‘dagnetwork’,‘OutputLayerType’,“分类”)modelFolder作为一个DAGNetwork对象,在包中保存自动生成的自定义层+ modelFolder,并将分类输出层附加到导入的网络体系结构的末尾。

    所在包的名称importTensorFlowNetwork保存自定义层,指定为字符向量或字符串标量。importTensorFlowNetwork保存自定义图层包+PackageName在当前文件夹中。如果您没有指定“PackageName”,然后importTensorFlowNetwork将自定义层保存在名为+modelFolder在当前文件夹中。有关包的详细信息,请参见包创建命名空间

    importTensorFlowNetwork当您导入自定义TensorFlow层或当软件无法将TensorFlow层转换为等效的内置MATLAB层时,会尝试生成自定义层。importTensorFlowNetwork将每个生成的自定义层保存为单独的.m文件中+PackageName.要查看或编辑自定义层,请打开相关的.m文件。有关自定义层的更多信息,请参见深度学习自定义层

    这个包+PackageName还能包含子包吗+行动.这个子包包含了与TensorFlow操作符对应的MATLAB函数(参见金宝app支持TensorFlow操作符),用于自动生成的自定义层。importTensorFlowNetwork将相关的MATLAB函数保存在单独的每个运算符中.m子包中的文件+行动.的目标函数dlnetwork,例如预测函数,在与自定义层交互时使用这些操作符。

    例子:“PackageName”、“MobileNet”

    例子:“PackageName”、“CustomLayers”

    深度学习工具箱网络的目标类型,指定为“dagnetwork”“dlnetwork”

    • 指定“TargetNetwork作为“dagnetwork”将网络导入为DAGNetwork对象。在这种情况下,必须包含由TensorFlow保存的模型损失函数或名称-值参数指定的输出层吗“OutputLayerType”

    • 指定“TargetNetwork作为“dlnetwork”将网络导入为dlnetwork对象。在这种情况下,不包括输出层。

    例子:“TargetNetwork”、“dlnetwork”

    输出层的类型importTensorFlowNetwork附加到导入的网络体系结构的末尾,指定为“分类”“回归”,或“pixelclassification”.附加一个pixelClassificationLayer(计算机视觉工具箱)对象需要计算机视觉工具箱™。

    • 如果你指定“TargetNetwork”作为“dagnetwork”保存的模型modelFolder没有指定损失函数,必须给名称-值参数赋值吗“OutputLayerType”.一个DAGNetwork对象必须有输出层。

    • 如果你指定“TargetNetwork”作为“dlnetwork”importTensorFlowNetwork忽略名称-值参数“OutputLayerType”.一个dlnetwork对象没有输出层。

    例子:“OutputLayerType”、“分类”

    输入图像的大小为网络,指定为两个或三个矢量对应的数值(高度、宽度)对于灰度图像和(高度、宽度、渠道)分别用于彩色图像。网络使用此信息时saved_model.pb文件中modelFolder不指定输入大小。

    例子:“ImageInputSize”,[28 28]

    类的输出层,指定为分类向量、字符串数组、单元格字符向量数组或“汽车”.如果指定字符向量的字符串数组或单元格数组str,然后importTensorFlowNetwork将输出层的类设置为分类(str, str).如果“汽车”,然后importTensorFlowNetwork将类设置为分类(1:N),在那里N是类的数量。

    • 如果你指定“TargetNetwork”作为“dagnetwork”importTensorFlowNetwork类的输出层中存储类的信息DAGNetwork对象。

    • 如果你指定“TargetNetwork”作为“dlnetwork”importTensorFlowNetwork忽略名称-值参数“类”.一个dlnetwork对象没有用于存储类信息的输出层。

    例子:“类”,{' 0 ',' 1 ',' 3 '}

    例子:“类”,直言({‘狗’,‘猫’})

    数据类型:字符|分类|字符串|细胞

    在命令窗口中显示导入进度信息的指示器,以数字或逻辑形式指定1(真正的)或0().

    例子:“详细”,“真正的”

    输出参数

    全部折叠

    预训练的TensorFlow网络,返回为DAGNetworkdlnetwork对象。

    • 指定“TargetNetwork作为“dagnetwork”将网络导入为DAGNetwork对象。在DAGNetwork对象,然后使用分类函数。

    • 指定“TargetNetwork作为“dlnetwork”将网络导入为dlnetwork对象。在dlnetwork对象,然后使用预测函数。将输入数据指定为dlarray使用正确的数据格式(有关详细信息,请参阅fmt的观点dlarray).

    限制

    • importTensorFlowNetwork金宝app支持TensorFlow版本v2.0, v2.1, v.2.2和v2.3。

    更多关于

    全部折叠

    TensorFlowkeras层支持转换为内置金宝appMATLAB

    importTensorFlowNetwork金宝app支持以下TensorFlow-Keras层类型转换为内置的MATLAB层,但有一些限制。

    TensorFlow-Keras层 对应的深度学习工具箱层
    添加 additionLayer

    激活,激活名称:

    • “elu”

    • “relu”

    • “线性”

    • “softmax”

    • “乙状结肠”

    • “漂亮”

    • 的双曲正切

    层:

    先进的激活:

    • ELU

    • Softmax

    • 线性整流函数(Rectified Linear Unit)

    • LeakyReLU

    • PReLu

    层:

    AveragePooling1D averagePooling1dLayerPaddingValue指定为“的意思是”
    AveragePooling2D averagePooling2dLayerPaddingValue指定为“的意思是”
    BatchNormalization batchNormalizationLayer
    双向(LSTM (__)) bilstmLayer
    连接 depthConcatenationLayer
    Conv1D convolution1dLayer
    Conv2D convolution2dLayer
    Conv2DTranspose transposedConv2dLayer
    CuDNNGRU gruLayer
    CuDNNLSTM lstmLayer
    密集的 fullyConnectedLayer
    DepthwiseConv2D groupedConvolution2dLayer
    辍学 dropoutLayer
    嵌入 wordEmbeddingLayer(文本分析工具箱)
    nnet.keras.layer.FlattenCStyleLayer
    GlobalAveragePooling1D globalAveragePooling1dLayer
    GlobalAveragePooling2D globalAveragePooling2dLayer
    GlobalMaxPool1D globalMaxPooling1dLayer
    GlobalMaxPool2D globalMaxPooling2dLayer
    格勒乌 gruLayer
    输入 imageInputLayersequenceInputLayer,或featureInputLayer
    LSTM lstmLayer
    MaxPool1D maxPooling1dLayer
    MaxPool2D maxPooling2dLayer
    multiplicationLayer
    SeparableConv2D groupedConvolution2dLayerconvolution2dLayer
    TimeDistributed sequenceFoldingLayer在包裹层之前,和sequenceUnfoldingLayer在包裹层之后
    UpSampling2D resize2dLayer(图像处理工具箱)
    UpSampling3D resize3dLayer(图像处理工具箱)
    ZeroPadding1D nnet.keras.layer.ZeroPadding1DLayer
    ZeroPadding2D nnet.keras.layer.ZeroPadding2DLayer

    *对于PReLU层,importTensorFlowNetwork将向量值的缩放参数替换为向量元素的平均值。您可以在导入后将参数更改为向量。有关示例,请参见导入Keras PReLU图层

    金宝app支持TensorFlow-Keras损失函数

    importTensorFlowNetwork金宝app支持以下Keras损失函数:

    • mean_squared_error

    • categorical_crossentropy

    • sparse_categorical_crossentropy

    • binary_crossentropy

    金宝app支持TensorFlow运营商

    importTensorFlowNetwork金宝app支持以下TensorFlow运算符转换为MATLAB函数dlarray金宝app支持。

    TensorFlow运营商 对应的MATLAB函数
    添加 tfAdd
    AddN tfAddN
    AddV2 tfAdd
    AvgPool tfAvgPool
    BatchMatMulV2 tfBatchMatMulV2
    BiasAdd tfBiasAdd
    BroadcastTo tfBroadcastTo
    tfCast
    ConcatV2 tfCat
    常量 无(转换为自定义层的权重)
    Conv2D tfConv2D
    DepthToSpace depthToSpace(图像处理工具箱)
    DepthwiseConv2dNative tfDepthwiseConv2D
    经验值 经验值
    FusedBatchNormV3 tfBatchnorm
    GatherV2 tfGather
    身份 无(转换为自定义层的值赋值)
    IdentityN tfIdentityN
    L2Loss tfL2Loss
    LeakyRelu leakyrelu
    lt<
    日志 日志
    MatMul tfMatMul
    MaxPool tfMaxPool
    最大 tfMaximum
    的意思是 tfMean
    最低 tfMinimum
    MirrorPad tfMirrorPad
    Mul tfMul
    负的 --
    tfStack
    tfPad
    PadV2 tfPad
    PartitionedCall 无(转换为自定义层方法中的函数)
    战俘 权力.^
    刺激 tfProd
    RandomStandardNormal tfRandomStandardNormal
    范围 tfRange
    ReadVariableOp 无(转换为自定义层的值赋值)
    RealDiv tfDiv
    线性整流函数(Rectified Linear Unit) 线性整流函数(Rectified Linear Unit)
    Relu6 线性整流函数(Rectified Linear Unit)而且最小值
    重塑 tfReshape
    ResizeNearestNeighbor dlresize(图像处理工具箱)
    Rsqrt √6
    形状 tfShape
    乙状结肠 乙状结肠
    Softmax softmax
    SpaceToDepth spaceToDepth(图像处理工具箱)
    广场 . ^ 2
    √6 √6
    SquaredDifference tfMultfSub
    挤压 tfSqueeze
    StatefulPartitionedCall 无(转换为自定义层方法中的函数)
    StopGradient tfStopGradient
    StridedSlice tfStridedSlicetfSqueeze
    tfSub
    双曲正切 双曲正切
    瓷砖 tfTile
    转置 交换

    有关操作于的函数的更多信息dlarray对象,看到支持dlarray的函数列表金宝app

    GPU使用导入网络

    importTensorFlowNetwork不会在GPU上执行。然而,importTensorFlowNetwork导入预训练的神经网络进行深度学习DAGNetworkdlnetwork对象,你可以在GPU上使用。

    • 如果将网络导入为DAGNetwork对象,可以在CPU或GPU上使用导入的网络进行预测分类.使用name-value参数指定硬件需求ExecutionEnvironment.对于具有多个输出的网络,使用预测函数DAGNetwork对象。

    • 如果将网络导入为DAGNetwork对象,可以在CPU或GPU上使用导入的网络进行预测预测.使用name-value参数指定硬件需求ExecutionEnvironment.如果网络有多个输出,则指定name-value参数ReturnCategorical作为真正的

    • 如果将网络导入为dlnetwork对象,可以在CPU或GPU上使用导入的网络进行预测预测.这个函数预测如果输入数据或网络参数存储在GPU上,则在GPU上执行。

      • 如果你使用minibatchqueue要处理和管理输入数据的小批,可以使用minibatchqueue如果GPU可用,对象默认将输出转换为GPU数组。

      • 使用dlupdate转换a的可学习参数dlnetwork对象到GPU数组。

        Dlnet = dlupdate(@gpuarray, Dlnet)

    • 导入的网络可以在CPU或GPU上进行训练trainNetwork.若要指定培训选项,包括用于执行环境的选项,请使用trainingOptions函数。使用name-value参数指定硬件需求ExecutionEnvironment.有关如何加速训练的更多信息,请参见并行、gpu和云中扩展深度学习

    使用GPU需要并行计算工具箱™和受支持的GPU设备。金宝app有关受支持设备的信息,请参见金宝appGPU支金宝app持版本(并行计算工具箱)

    提示

    • 如果导入的网络包含不支持转换为内置MATLAB层的层(请参阅金宝appTensorFlow-Keras层支持转换为内置金宝appMATLAB层),importTensorFlowNetwork不生成自定义层,然后importTensorFlowNetwork返回一个错误。在这种情况下,您仍然可以使用importTensorFlowLayers导入网络架构。

    • 要使用预训练的网络对新图像进行预测或迁移学习,您必须以与用于训练导入模型的图像预处理相同的方式对图像进行预处理。最常见的预处理步骤是调整图像大小,减去图像平均值,并将图像从BGR图像转换为RGB。

      • 要调整图像大小,请使用imresize.例如,[3] 227227年imresize(图片)

      • 要将图像从RGB格式转换为BGR格式,请使用翻转.例如,翻转(图片3)

      有关用于训练和预测的图像预处理的更多信息,请参见用于深度学习的图像预处理

    • 包裹的成员+PackageName(自定义层和TensorFlow操作符)是不可访问的,如果包的父文件夹不在MATLAB路径上。有关更多信息,请参见包和MATLAB路径

    选择功能

    使用importTensorFlowNetworkimportTensorFlowLayers以保存的模型格式导入TensorFlow网络[2].或者,如果网络是HDF5或JSON格式,请使用importKerasNetworkimportKerasLayers导入网络。

    参考文献

    [1]TensorFlowhttps://www.tensorflow.org/

    [2]使用SavedModel格式https://www.tensorflow.org/guide/saved_model

    R2021a中引入