主要内容

进口卡拉斯层

从Keras网络导入图层

描述

例子

=importKerasLayers(modelfile导入TensorFlow的图层™-该函数返回HDF5中定义的层(.H5)或json(. json)由文件名指定的文件modelfile

此函数需要用于张量流模型的深度学习工具箱™转换器金宝app支持包。如果未安装此支持包,则该功能将提供下载链接。

例子

=importKerasLayers(modelfile名称,价值使用由一个或多个名称-值对参数指定的附加选项从TensorFlow-Keras网络导入层。

例如,importKerasLayers (modelfile ImportWeights,真的)从模型文件导入网络图层和权重modelfile

例子

全部收缩

下载并安装深度学习工具箱转换器,用于TensorFlow模型支持包。金宝app

类型进口卡拉斯层在命令行。

进口卡拉斯层

如果未安装TensoRFlow模型的深度学习工具箱转换器,则该函数在附加资源管理器中提供指向所需支持包的链接。金宝app要安装支持包,请单击“链接”,金宝app然后单击安装. 通过从模型文件导入图层,检查安装是否成功'digitsdagnet.h5'如果安装了所需的支持包,则函数返回金宝appLayerGraph对象

modelfile ='digitsdagnet.h5'; net=importKerasLayers(模型文件)
net=具有以下属性的LayerGraph:Layers:[13x1 nnet.cnn.layer.layer]连接:[13x2表]输入名称:{'input_1'}输出名称:{'ClassificationLayer_activation_1'}

从模型文件中导入网络层digitsDAGnet.h5

modelfile ='digitsdagnet.h5';层= importKerasLayers (modelfile)
layers=LayerGraph,属性:layers:[13x1 nnet.cnn.layer.layer]连接:[13x2表]输入名称:{'input_1'}输出名称:{'ClassificationLayer_activation_1'}

绘制网络架构图。

情节(层)

Figure包含axes对象。axes对象包含graphplot类型的对象。

指定要导入的网络文件。

modelfile ='digitsdagnet.h5'

导入网络层。

层= importKerasLayers (modelfile)
layers=LayerGraph,属性:layers:[13x1 nnet.cnn.layer.layer]连接:[13x2表]输入名称:{'input_1'}输出名称:{'ClassificationLayer_activation_1'}

加载用于训练分类器识别新数字的数据集。

文件夹= fullfile (toolboxdir (“nnet”),“nndemos”'nndatasets''digitdataset');imd = imageDatastore(文件夹,...“包含子文件夹”符合事实的...“标签源”“foldernames”);

将数据集划分为训练集和测试集。

numTrainFiles = 750;[imdsTrain, imdsTest] = splitEachLabel (imd, numTrainFiles“随机化”);

设置培训选项。

选项=培训选项(“个”...“MaxEpochs”,10,...'italllearnrate',0.001);

使用训练数据的训练网络。

网= trainNetwork (imdsTrain层,选项);
单CPU训练。|========================================================================================| | 时代| |迭代时间| Mini-batch | Mini-batch |基地学习  | | | | ( hh: mm: ss) | | |丧失准确性  | |========================================================================================| | 1 | 1 | 00:00:01 | 15.62% | 12.6982 |0.0010 | | 1 | 50 | 00:00:17 | 63.28% | 1.2109 | 0.0010 | | 2 | 100 | 00:00:34 | 85.16% | 0.4193 | 0.0010 | | 3 | 150 | 00:00:51 | 96.88% | 0.1749 | 0.0010 | | 4 | 200 | 00:01:06 | 99.22% | 0.0457 | 0.0010 | | 250 | | 00:01:19 | 100.00% | 0.0374 | 0.0010 | | 6 | 300 | 00:01:34 | 96.88% | 0.1223 | 0.0010 | | 350 | | 00:01:50 | 100.00% | 0.0087 |0。0010||7 | 400 | 00:02:04 | 100.00% | 0.0166 | 0.0010 | | 8 | 450 | 00:02:20 | 100.00% | 0.0098 | 0.0010 | | 9 | 500 | 00:02:38 | 100.00% | 0.0047 | 0.0010 | | 10 | 550 | 00:03:03 | 100.00% | 0.0031 | 0.0010 | | 10 | 580 | 00:03:13 | 100.00% | 0.0059 | 0.0010 | |========================================================================================| Training finished: Max epochs completed.

在未用于训练网络的测试集中运行训练过的网络,并预测图像标签(数字)。

Ypred =分类(网络,IMDSTEST);ytest = imdstest.labels;

计算的准确性。

精度= sum(YPred == YTest)/numel(YTest)
精度=0.9856

指定网络文件以导入图层和权重。

modelfile ='digitsdagnet.h5'

从指定的文件导入网络架构和权重。要导入层权重,请指定'进口重量'成为符合事实的.该函数还将其权重与相同的HDF5文件导入其权重。

层= importKerasLayers (modelfile,'进口重量',对)
layers=LayerGraph,属性:layers:[13x1 nnet.cnn.layer.layer]连接:[13x2表]输入名称:{'input_1'}输出名称:{'ClassificationLayer_activation_1'}

查看第二层中重量的大小。

重量= layers.Layers (2) .Weights;大小(重量)
ans =.1×47 7 1 20

该函数导入了权重,因此层权重是非空的。

指定要导入层次的网络文件和包含权重的文件。

modelfile =“digitsDAGnet.json”;重量='digitsdagnet.weights.h5'

从指定的文件导入网络架构和权重。json文件不包含输出层。指定输出层,以便importKerasLayers在网络架构的末端添加一个输出层。

层= importKerasLayers (modelfile,...'进口重量'符合事实的...“权重文件”权重,...“OutputLayerType”“分类”
layers=LayerGraph,属性:layers:[13x1 nnet.cnn.layer.layer]连接:[13x2表]输入名称:{'input_1'}输出名称:{'ClassificationLayer_activation_1'}

此示例显示如何从佩带的Keras网络导入图层,将不受支持的图层替换为自定义图层,并将图层组装到准备预测的网络中。金宝app

导入Keras网络

从Keras网络模型导入层。网络在“digitsDAGnetwithnoise.h5”分类数字图像。

文件名=“digitsDAGnetwithnoise.h5”;lgraph = importKerasLayers(文件名,'进口重量',对);
警告:无法导入某些keras图层,因为深度学习工具箱不支持它们。金宝app他们已被占位符层所取代。要查找这些图层,请在返回的对象上调用FindPlaceHolderLayers。

Keras网络包含一些深度学习工具箱不支持的层。金宝app的进口卡拉斯层函数显示一个警告并将不支持的层替换为占位符层。金宝app

使用阴谋

图绘制(3)标题(“进口网络”

图中包含一个轴对象。具有标题导入网络的轴对象包含Type Graphplot的对象。

替换占位符图层

要替换占位符层,首先确定要替换的层的名称。使用。查找占位符层findPlaceholderLayers

placeholderLayers = findPlaceholderLayers (lgraph)
PlaceHolderLayers = 2x1占位符阵列与图层:1'Gaussiannoise_1'占位符层占位符为'Gaussiannoise'keras第2层'Gaussian_Noise_2'占位符号为“高斯登单”keras层

显示这些层的Keras配置。

placeholderLayers。KerasConfiguration
ans =.结构与字段:可训练:1 name: 'gaussian_noise_1' stddev: 1.5000
ans =.结构与字段:可训练:1 name: 'gaussian_noise_2' stddev: 0.7000

定义一个自定义高斯噪声层。要创建这个图层,保存文件gaussianNoiseLayer.m然后,创建两个高斯噪声层,其配置与导入的Keras层相同。

gnlayer1 =高斯登机会(1.5,“new_gaussian_noise_1”); gnLayer2=高斯噪声层(0.7,'new_gaussian_noise_2');

使用自定义层替换占位符层replaceLayer

lgraph = replaceLayer (lgraph,“高斯噪声1”,gn1);lgraph=替换层(lgraph,“高斯噪声”,gn2);

使用绘制更新的层图阴谋

图绘制(3)标题(“已替换层的网络”

图中包含一个轴对象。标题为“替换层网络”的axis对象包含一个graphplot类型的对象。

指定类名

如果导入的分类层不包含类,则必须在预测之前指定这些。如果未指定类,则软件会自动将类设置为12, ...,N,在那里N为类数。

通过查看来找分类层的索引图层图的属性。

lgraph。层
ans=15x1带层的层阵列:1“输入1”图像输入28x28x1图像2“conv2d_1”卷积20 7x7x1带跨距的卷积[1]和填充“相同的”3“conv2d_1_relu”relu relu 4“conv2d_2”卷积20 3x3x1带跨距的卷积[1]和填充“相同的”5“conv2d_2_relu”relu relu 6“新的_高斯_噪声_1”高斯噪声标准偏差为1.5 7“新的_高斯_噪声_2”高斯噪声标准偏差为0.7 8“最大_池2d_1”最大池2x2最大池步幅[2]和填充“相同的”9“最大池2D_2”最大池2x2最大池带跨距[2 2]和填充“相同的”10“展平_1”Keras展平激活为1-D假设C样式(行主)顺序11“展平_2”Keras展平激活为1-D假设C样式(行主)顺序12“串联1”深度串联2个输入的深度串联13“密集1”完全连接10完全连接层14“激活1”Softmax Softmax 15“分类层激活1”分类输出交叉熵

分类层的名称为“ClassificationLayer_activation_1”.查看分类层并检查班级财产。

Clayer = Lapraph.Layers(END)
cLayer=ClassificationOutputLayer,属性:Name:'ClassificationLayer\u activation\u 1'类:'auto'类权重:'none'输出大小:'auto'超参数丢失函数:'crossentropyex'

因为班级该层的属性为“汽车”,必须手动指定类。请将类设置为01, ...,9,然后用新的将导入的分类层替换为。

粘土。类=字符串(0:9)
class: [0 1 2 3 4 5 6 7 8 9] ClassWeights: 'none' OutputSize: 10 Hyperparameters LossFunction: 'crossentropyex'
lgraph = replaceLayer (lgraph,“ClassificationLayer_activation_1”、粘土);

组装网络

使用assembleNetwork。该函数返回一个达格网络准备用于预测的对象。

净= assembleNetwork (lgraph)
net = DAGNetwork with properties: Layers: [15x1 net.cnn.layer. layer] Connections: [15x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

从具有参数整流线性单元(PReLU)层的Keras网络导入层。

PReLU层执行一个阈值操作,其中对于每个通道,任何小于零的输入值都乘以一个标量。PReLU运算由

f x x 如果 x > 0 一个 x 如果 x 0

哪里 x 是非线性激活的输入 f 频道上 一个 为控制负部分斜率的缩放参数。下标 一个 表示参数可以是一个矢量,并且非线性激活可以在不同的通道上变化。

进口卡拉斯网络进口卡拉斯层可以导入包含PReLU层的网络。这些函数支持标量值和向量值缩放参数。如果缩放参数是向量,则这些函数将向量替换为向量元素的平均值。导金宝app入后,您可以修改PReLU层以具有向量值缩放参数。

指定要导入的网络文件。

modelfile =“digitsDAGnetwithPReLU.h5”

digitsDAGnetwithPReLU包括两个PReLU层。一个具有标量值缩放参数,另一个具有向量值缩放参数。

从中导入网络架构和权重modelfile

层= importKerasLayers (modelfile,'进口重量',对);
警告:层'p_re_lu_1'是带有向量值参数的PReLU层。函数将形参替换为向量元素的平均值。您可以在导入后将参数更改回矢量。

进口卡拉斯层函数为PReLu层显示一个警告p_re___1. 该函数将替换的向量值缩放参数p_re___1用向量元素的平均值。可以将参数更改回向量。首先,通过查看财产。

层。层
ans=带层的13x1层阵列:1“输入_1”图像输入28x28x1图像2“conv2d_1”卷积20 7x7x1卷积带跨步[1],填充“相同的”3“conv2d_2”卷积20 3x3x1卷积带跨步[1]和填充“相同的”4“p\u re\u lu\u 1”PReLU PReLU layer 5“p\u re\u lu\u 2”PReLU PReLU layer 6“最大池2D\u 1”最大池2x2最大池带跨步[2 2]和填充“相同的”7“最大池2D\u 2”最大池2x2最大池带跨步[2]和填充“相同的”8“展平1”Keras展平激活为1-D假设C-风格(行大调)订单9“展平2”Keras将展平激活变为1-D假设C样式(行主)订单10“串联1”深度串联2个输入深度串联11“密集1”完全连接10完全连接层12“密集1”softmax“softmax 13”分类层\u密集1”分类输出交叉熵

有两个PReLU层。提取第四层p_re___1,它最初有一个用于通道维度的向量值缩放参数。

模板层=层。层(4)
tempLayer=PreluLayer,属性为:Name:'p_re_lu_1'RawAlpha:[20x1 single]可学习参数Alpha:0.0044状态参数无属性。显示所有属性

拉阿尔法属性包含向量值缩放参数,以及α属性包含一个标量,该标量是向量值的元素平均值。重塑拉阿尔法将向量值放置在第三维中,第三维对应于通道维。然后,取代α与重塑拉阿尔法价值观

tempLayer。α=reshape(tempLayer.RawAlpha,[1,1,numel(tempLayer.RawAlpha)])
tempLayer=PreluLayer,带属性:Name:'p_re_lu_1'RawAlpha:[20x1 single]可学习参数Alpha:[1x1x20 single]状态参数无属性。显示所有属性

取代p_re___1圣堂武士

层= replaceLayer(层,“p_re_lu_1”,templayer);图层.Layers(4)
RawAlpha: [20x1 single] Learnable Parameters Alpha: [1x1x20 single] State Parameters无属性。显示所有属性

现在p_re___1图层具有矢量值缩放参数。

输入参数

全部收缩

包含网络架构的模型文件的名称,可能还有权重,指定为字符向量或字符串标量。该文件必须在当前文件夹中,在MATLAB的一个文件夹中®路径,或者必须包含文件的完整路径或相对路径。

如果modelfile包括

  • 网络架构和权重,则必须为HDF5(.H5)的格式。

  • 只有网络架构,然后它可以是HDF5或JSON (. json)的格式。

如果modelfile只包含网络体系结构,然后可以选择使用'进口重量'“权重文件”名称-值对参数。如果提供权重,则权重文件必须为HDF5格式。

例子:“digitsnet.h5”

数据类型:字符|字符串

名称-值参数

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

例子:importKerasLayers (modelfile“OutputLayerType”、“分类”)从模型文件导入网络图层modelfile并在KERAS层的末尾添加输出层进行分类问题。

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

如果一个网络modelfile有多个输出,那么您无法使用此参数指定输出层类型。进口卡拉斯层插入输出的占位符层。导入后,可以使用查找和替换占位符层findPlaceholderLayersreplaceLayer,分别。

例子:“OutputLayerType”、“回归”

网络输入图像的大小,指定为对应于(高度、宽度)对于灰度图像和(高度、宽度、渠道)为彩色图像,分别。网络使用这些信息时modelfile没有指定输入大小。

如果一个网络modelfile如果有多个输入,则不能使用此参数指定输入大小。进口卡拉斯层为输入插入占位符层。导入后,您可以通过使用找到并替换占位符层findPlaceholderLayersreplaceLayer,分别。

例子:“ImageInputSize”,[28]

指示要导入权重以及网络架构,指定为错误的符合事实的

  • 如果'进口重量'符合事实的modelfile包括重量,然后进口卡拉斯层modelfile,其中必须有HDF5 (.H5)的格式。

  • 如果'进口重量'符合事实的modelfile不包含权重,则必须指定包含权重的单独文件,使用“权重文件”名称-值对的论点。

例子:“ImportWeights”,真的

数据类型:逻辑

权重文件名,当从其中导入权重时modelfile不包括权重,指定为字符向量或字符串标量。要使用此名称值对参数,您还必须设置'进口重量'符合事实的

权重文件必须在当前文件夹中,在MATLAB路径上的文件夹中,或者必须包含文件的完整或相对路径。

例子:'weyrefile','preefs.h5'

数据类型:字符|字符串

输出参数

全部收缩

网络架构,作为一个Keras网络类型为时的数组对象顺序,或作为一个返回LayerGraph对象,当Keras网络为类型时模型

局限性

  • 进口卡拉斯层金宝app支持TensorFlow-Keras版本如下:

    • 该功能完全支持TensorFlow K金宝apperas 2.2.4之前的版本。

    • 该功能对TensorFlow Keras版本2.2.5至金宝app2.4.0提供有限的支持。

更多关于

全部收缩

金宝app支持Keras层

进口卡拉斯层金宝app支持以下TensorFlow-Keras层类型转换为内置MATLAB层,但有一些限制。

TensorFlow-Keras层 相应的深层学习工具箱层
添加 附加学者

激活,具有激活名称:

  • “elu”

  • “雷卢”

  • “线性”

  • “softmax”

  • “乙状结肠”

  • '嗖嗖'

  • 'tanh'

层:

高级激活:

  • ELU

  • softmax.

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

  • 利基雷卢

  • PReLu

层:

AveragePooling1D averagePooling1dLayerPaddingValue指定为“中庸”
普通Pooling2d. averagePooling2dLayerPaddingValue指定为“中庸”
批处理规范化 批处理规范化层
双向(LSTM (__)) 双层膜
连接 depthConcatenationLayer
Conv1D 卷积层
Conv2D 卷积层
Conv2DTranspose TransposedConv2dlayer.
库德宁格鲁 gruLayer
CuDNNLSTM lstmLayer
稠密 fullyConnectedLayer
DepthwiseConv2D groupedconvolution2dlayer.
辍学 落花人
嵌入 wordEmbeddingLayer(文本分析工具箱)
扁平 nnet.keras.layer.FlattleCstyleLayer
GlobalaveragePooling1d. globalAveragePooling1dLayer
globalaveragepooling2d. GlobalAveragePoolg2Dlayer
GlobalMaxPool1D globalMaxPooling1dLayer
GlobalMaxPool2D GlobalMapooling2DLayer
gru. gruLayer
输入 图像输入层序列输入层featureInputLayer
LSTM lstmLayer
MaxPool1D maxPooling1dLayer
MaxPool2D maxPooling2dLayer
multiplicationLayer
SeparableConv2D groupedconvolution2dlayer.卷积层
划分 SequenceFoldingLayer.在包装层之前,和sequenceUnfoldingLayer在包裹层之后
UpSampling2D 调整2D图层的大小(图像处理工具箱)
UpSampling3D resize3dLayer(图像处理工具箱)
Zeropaddding1d. nnet.keras.layer.ZeroPadding1DLayer
Zeropaddding2d. nnet.keras.layer.ZeroPadding2DLayer

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

金宝app支持的Keras损失函数

进口卡拉斯层金宝app支持以下Keras损耗功能:

  • 均方误差

  • patporical_crossentropy.

  • 稀疏分类交叉熵

  • 二元交叉熵

在GPU上使用导入的网络图层

进口卡拉斯层不在GPU上执行。但是,进口卡拉斯层进口普雷雷暗神经网络的层以获得深度学习作为一个数组或LayerGraph对象,可以在GPU上使用。

  • 将导入的层转换为达格网络对象的使用assembleNetwork.在达格网络对象,然后可以通过使用分类.使用name-value参数指定硬件需求ExecutionEnvironment.对于具有多个输出的网络,请使用预测函数并指定名称-值参数ReturnCategorical作为符合事实的

  • 转换导入LayerGraph对象一个dlnetwork对象的使用dlnetwork.在dlnetwork对象,然后可以通过使用预测.这个函数预测如果输入数据或网络参数存储在GPU上,则在GPU上执行。

    • 如果你使用小型批处理队列对小批量输入数据进行处理和管理小型批处理队列对象默认将输出转换为GPU阵列(如果有GPU可用)。

    • dlupdate转换a的可学习参数dlnetwork对象到GPU阵列。

      dlnet = dlupdate(@ gpuarray,dlnet)

  • 你可以在CPU或GPU上使用Trainnetwork..要指定培训选项,包括执行环境的选项,请使用培训选项函数。使用name-value参数指定硬件需求ExecutionEnvironment。有关如何加快培训的更多信息,请参阅在gpu和云上并行扩展深度学习

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

提示

  • 如果网络包含一个层TensorFlow模型的深度学习工具箱转换器不支持(请参见金宝app金宝app支持Keras层),然后进口卡拉斯层插入占位符层以替换不受支持的层。若要查找网络中不受支持层的名称和索引,请使用金宝appfindPlaceholderLayers作用然后,可以使用定义的新图层替换占位符图层。要替换图层,请使用replaceLayer

  • 可以使用定义的新图层替换占位符图层。

  • 您可以导入具有多输入多输出(MIMO)的Keras网络。使用进口卡拉斯网络如果网络包含输入的输入大小信息和输出的损失信息。否则,使用进口卡拉斯层.的进口卡拉斯层功能插入输入和输出的占位符层。导入后,您可以通过使用找到并替换占位符层findPlaceholderLayersreplaceLayer,分别。导入MIMO Keras网络的工作流与导入MIMO ONNX™网络的工作流相同。例如,请参见导入和组装具有多个输出的ONNX网络. 要了解具有多输入多输出的深度学习网络,请参阅多输入多输出网络

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

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

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

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

替代功能

  • 进口卡拉斯网络进口卡拉斯层导入HDF5或JSON格式的TensorFlow-Keras网络。如果TensorFlow网络是保存的模型格式,则使用importTensorFlowNetwork输入流层

  • 如果导入自定义TensorFlow Keras层,或者软件无法将TensorFlow Keras层转换为等效的内置MATLAB层,则可以使用importTensorFlowNetwork输入流层,尝试生成自定义图层。例如,importTensorFlowNetwork输入流层当你导入TensorFlow-Keras时生成一个自定义层lambda.层。

参考文献

[1]Keras: Python深度学习库https://keras.io

介绍了R2017b