主要内容

进口卡拉斯层

从Keras网络导入层

描述

例子

=importKerasLayers(modelfile)从模型文件中导入TensorFlow™-Keras网络的层。函数返回HDF5中定义的层(.h5)或JSON (. json)由文件名指定的文件modelfile

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

例子

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

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

例子

全部折叠

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

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

进口卡拉斯层

如果未安装TensorFlow模型支持包的深度学习工具箱转换器,则该函数将提供到Add-On Explorer中所需支持包金宝app的链接。要安装支持包,请单击链接,然后金宝app单击安装. 通过从模型文件导入图层,检查安装是否成功“digitsDAGnet.h5”在命令行。如果安装了所需的支持包,则该函数金宝app返回aLayerGraph对象

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)
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

绘制网络架构图。

情节(层)

图中包含一个坐标轴。坐标轴包含一个graphplot类型的对象。

指定要导入的网络文件。

modelfile =“digitsDAGnet.h5”

导入网络层。

层= importKerasLayers (modelfile)
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

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

文件夹= fullfile (toolboxdir (“nnet”),“nndemos”“nndatasets”“DigitDataset”);imd = imageDatastore(文件夹,...“包含子文件夹”,真的,...“标签源”“foldernames”);

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

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

设置培训选项。

选项=培训选项(“个”...“MaxEpochs”10...“InitialLearnRate”, 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:11 | 63.28% | 1.2109 | 0.0010 | | 2 | 100 | 00:00:21 | 85.16% | 0.4193 | 0.0010 | | 3 | 150 | 00:00:31 | 96.88% | 0.1749 | 0.0010 | | 4 | 200 | 00:00:42 | 99.22% | 0.0457 | 0.0010 | | 250 | | 00:00:52 | 100.00% | 0.0374 | 0.0010 | | 6 | 300 | 00:01:03 | 96.88% | 0.1223 | 0.0010 | | 350 | | 00:01:13 | 100.00% | 0.0087 |0.0010||7 | 400 | 00:01:22 | 100.00% | 0.0166 | 0.0010 | | 8 | 450 | 00:01:31 | 100.00% | 0.0098 | 0.0010 | | 9 | 500 | 00:01:41 | 100.00% | 0.0047 | 0.0010 | | 10 | 550 | 00:01:55 | 100.00% | 0.0031 | 0.0010 | | 10 | 580 | 00:02:03 | 100.00% | 0.0059 | 0.0010 | |========================================================================================|

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

YPred =分类(净,imdsTest);欧美= imdsTest.Labels;

计算的准确性。

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

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

modelfile =“digitsDAGnet.h5”

从指定的文件导入网络架构和权重。要导入层权重,请指定“ImportWeights”符合事实的.该函数还从相同的HDF5文件中导入层和它们的权重。

层= importKerasLayers (modelfile,“ImportWeights”,对)
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

查看第二层权重的大小。

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

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

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

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

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

层= importKerasLayers (modelfile,...“ImportWeights”,真的,...“WeightFile”权重,...“OutputLayerType”“分类”)
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

这个例子展示了如何从预先训练的Keras网络导入层,用自定义层替换不支持的层,并将层组装到一个网络中准备进行预测。金宝app

进口Keras网络

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

文件名=“digitsDAGnetwithnoise.h5”;lgraph = importKerasLayers(文件名,“ImportWeights”,真正的);
警告:无法导入一些Keras层,因为它们不被深度学习工具箱支持。金宝app它们已经被占位符层所取代。要查找这些层,调用返回对象上的函数findPlaceholderLayers。

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

使用情节

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

图中包含一个坐标轴。标题为“导入网络”的轴包含一个graphplot类型的对象。

替换占位符图层

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

placeholderLayers = findPlaceholderLayers (lgraph)
placeholderLayers = 2x1 PlaceholderLayer array with layers: 1' gaussian_noise_1' PLACEHOLDER LAYER PLACEHOLDER for 'GaussianNoise' Keras LAYER 2' gaussian_noise_2' PLACEHOLDER LAYER PLACEHOLDER for 'GaussianNoise' Keras LAYER

显示这些层的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 = gaussianNoiseLayer (1.5,“new_gaussian_noise_1”); gnLayer2=高斯噪声层(0.7,“new_gaussian_noise_2”);

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

lgraph = replaceLayer (lgraph,“gaussian_noise_1”, gnLayer1);lgraph = replaceLayer (lgraph,“gaussian_noise_2”,gn2);

使用绘制更新的层图情节

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

图中包含一个坐标轴。标题为“替换层网络”的轴包含一个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”.查看分类层并检查财产。

粘土= lgraph.Layers(结束)
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,“ImportWeights”,真正的);
警告:层'p_re_lu_1'是带有向量值参数的PReLU层。函数将形参替换为向量元素的平均值。您可以在导入后将参数更改回矢量。

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

层。层
ans = 13x1图层数组:1“input_1”图像输入28 x28x1图片2的conv2d_1卷积20 7 x7x1旋转步[1]和填充“相同”3“conv2d_2”卷积20 3 x3x1旋转步[1]和填充“相同”4“p_re_lu_1”PReLU PReLU层5‘p_re_lu_2 PReLU PReLU层6“max_pooling2d_1”马克斯池2 x2马克斯池步(2 - 2)和填充'同样' 7“max_pooling2d_2”马克斯池2 x2 Max池步(2 - 2)和填充“相同”8 ' flatten_1 Keras平压平激活成一维假设c风格的(行)订单9的flatten_2 Keras平压平激活成一维假设c风格的(行)为10的concatenate_1深度连接深度连接2输入11'dense_1' Fully Connected 10 Fully Connected layer 12 'dense_1_softmax' Softmax Softmax 13 'ClassificationLayer_dense_1' Classification Output crossentropyex .

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

模板层=层。层(4)
tempLayer = PreluLayer with properties: Name: 'p_re_lu_1' RawAlpha: [20x1 single] Learnable Parameters 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_lu_1圣堂武士

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

现在,p_re_lu_1层有一个向量值缩放参数。

输入参数

全部折叠

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

如果modelfile包括

  • 网络架构和权重,那么它必须在HDF5 (.h5)的格式。

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

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

例子:“digitsnet.h5”

数据类型:字符|字符串

名称-值对的观点

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

例子:importKerasLayers (modelfile“OutputLayerType”、“分类”)从模型文件中导入网络层modelfile并在Keras层的末尾添加了一个用于分类问题的输出层。

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

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

例子:“OutputLayerType”、“回归”

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

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

例子:“ImageInputSize”,[28 28]

导入权重的指标以及网络架构,指定为其中之一符合事实的

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

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

例子:“ImportWeights”,真的

数据类型:逻辑

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

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

例子:“WeightFile”、“weights.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层 对应的深度学习工具箱层
添加 additionLayer

激活,具有激活名称:

  • “elu”

  • “雷卢”

  • “线性”

  • “softmax”

  • “乙状结肠”

  • “漂亮”

  • 的双曲正切

层:

先进的激活:

  • ELU

  • Softmax

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

  • 利基雷卢

  • PReLu*

层:

AveragePooling2D averagePooling2dLayerPaddingValue指定为“中庸”
BatchNormalization batchNormalizationLayer
双向(LSTM (__)) 双层膜
连接 depthConcatenationLayer
Conv2D 卷积层
Conv2DTranspose transposedConv2dLayer
库德宁格鲁 gruLayer
CuDNNLSTM lstmLayer
密集的 fullyConnectedLayer
DepthwiseConv2D groupedConvolution2dLayer
辍学 落花人
嵌入 wordEmbeddingLayer(文本分析工具箱)
nnet.keras.layer.FlattenCStyleLayer
GlobalAveragePooling2D globalAveragePooling2dLayer
GlobalMaxPooling2D GlobalMapooling2DLayer
格勒乌 gruLayer
输入 imageInputLayersequenceInputLayer,或featureInputLayer
LSTM lstmLayer
MaxPoolig2D maxPooling2dLayer
multiplicationLayer
SeparableConv2D groupedConvolution2dLayer卷积层
TimeDistributed sequenceFoldingLayer在包裹层之前,然后sequenceUnfoldingLayer缠绕层后
UpSampling2D resize2dLayer(图像处理工具箱)
UpSampling3D resize3dLayer(图像处理工具箱)
ZeroPadding2D nnet.keras.layer.ZeroPadding2DLayer

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

金宝app支持Keras Loss功能

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

  • 均方误差

  • categorical_crossentropy

  • sparse_categorical_crossentropy

  • binary_crossentropy

提示

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

  • 您可以将占位符层替换为您定义的新层。

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

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

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

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

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

替代功能

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

参考文献

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

介绍了R2017b