主要内容

importKerasLayers

从Keras网络导入层

描述

例子

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

此功能需要深度学习工具箱™转换器用于TensoRFLOW模型万博1manbetx支持包。如果没有安装此支万博1manbetx持包,则该函数将提供下载链接。

例子

层数= importKerasLayers (模数名称,价值将图层从TensorFlow-Keras网络导入,其中包含一个或多个名称值对参数指定的其他选项。

例如,importKeraslayers(Modeloile,'Importuights',True)从模型文件中导入网络层和权重模数

例子

全部收缩

下载并安装深度学习工具箱转换为TensorFlow模型的支持包。万博1manbetx

类型importKerasLayers在命令行。

importKerasLayers

如果没有安装深度学习工具箱转换为TensorFlow模型支持包,那么函数提供了附加在资源管理器链接到所需的支持包。万博1manbetx要安装支持包,点击链接,然后点万博1manbetx击安装.通过从模型文件导入层来检查安装是否成功'digitsDAGnet.h5'在命令行。如果安装了所需的支持包,则该函数万博1manbetx返回a分层图对象。

modelfile =.'digitsDAGnet.h5';净= importKerasLayers (modelfile)
net = LayerGraph with properties: Layers: [13x1 net.cnn.layer. layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

从模型文件导入网络图层digitsdagnet.h5.

modelfile =.'digitsDAGnet.h5';图层= ImportKeraslayers(模数)
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

绘制网络架构图。

情节(层)

图中包含一个坐标轴。轴包含Type Graphplot的对象。

指定要导入的网络文件。

modelfile =.'digitsDAGnet.h5'

导入网络层。

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

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

folder = fullfile(toolboxdir('nnet'),“nndemos”'nndatasets''digitdataset');imd = imageDatastore(文件夹,...“IncludeSubfolders”,真的,...“LabelSource”“foldernames”);

将数据集分区为培训和测试集。

numtrainfiles = 750;[IMDStrain,IMDSTEST] = SpliteachLabel(IMDS,Numtrainfiles,“随机”);

设置培训选项。

选择= trainingOptions ('sgdm'...“MaxEpochs”10...'InitialLearnRate',0.001);

使用训练数据训练网络。

net = trainnetwork(Imdstrain,图层,选项);
单CPU上的培训。| ======================================================================================== ||大纪元|迭代|已用时间|小批量|小批量|基础教育|| | | (hh:mm:ss) | Accuracy | Loss | Rate | |========================================================================================| | 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 | | 5 | 250 | 00:00:52 | 100.00% | 0.0374 | 0.0010 | | 6 | 300 | 00:01:03 | 96.88% | 0.1223 | 0.0010 | | 7 | 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);YTest = imdsTest.Labels;

计算准确性。

精度= SUM(YPRED == YTEST)/ NUMEL(YTEST)
精度= 0.9856

指定网络文件导入层和重量从。

modelfile =.'digitsDAGnet.h5'

从指定的文件导入网络架构和权重。要导入图层权重,请指定'ImportWeights'真正的.该功能还导入层从同一HDF5文件及其权重。

图层= importKeraslayers(模数,'ImportWeights',真正的)
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

查看权重的大小在第二层中。

权重=图层.Layers(2)。重量;尺寸(重量)
ans =.1×47 7 1 20

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

指定网络文件以导入从包含权重的文件和文件。

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

从指定的文件导入网络架构和权重。.json文件不包含输出层。指定输出层,以便导入KerasLayers在网络架构结束时添加输出层。

图层= importKeraslayers(模数,...'ImportWeights',真的,...“WeightFile”,重量,...'outputlayertype'“分类”
layer = LayerGraph with properties: layers: [13x1 nnet.cnn.layer.Layer] Connections: [13x2 table] InputNames: {'input_1'} OutputNames: {'ClassificationLayer_activation_1'}

这个例子展示了如何从一个预训练的Keras网络导入层,用定制层替代不支持层,并且这些层组装成准备用于预测的网络。万博1manbetx

进口Keras网络

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

filename =.“digitsDAGnetwithnoise.h5”;lgraph = importKerasLayers(文件名,'ImportWeights',真正的);
警告:无法导入一些Keras层,因为他们没有被深度学习工具箱支持。万博1manbetx他们已被替换占位符层。为了找到这些层,调用返回的对象的功能findPlaceholderLayers。

Keras网络包含深度学习工具箱不支持的一些图层。万博1manbetx这importKerasLayers函数显示警告并用占位符图层替换不支持的图层。万博1manbetx

使用图层图阴谋

图图(lgraph)称号(“进口网络”

图中包含一个坐标轴。带有标题导入网络的轴包含Type GraphPlot的对象。

替换占位符层

要替换占位符,请先识别要替换的图层的名称。查找占位符层使用findPlaceholderLayers

PlaceHolderLayers = FindPlaceHolderLayers(Lapraph)
placeholderLayers = 2×1 PlaceholderLayer阵列层:1 'gaussian_noise_1' PLACEHOLDER LAYER占位符 '高斯噪声' Keras层2 'gaussian_noise_2' PLACEHOLDER LAYER占位符 '高斯噪声' Keras层

显示这些图层的Keras配置。

placeholderlayers.kerasconfiguration.
ans =.同场的结构:培训:1名称:'Gaussian_Noise_1'STDDEV:1.5000
ans =.同场的结构:培训:1名称:'Gaussian_Noise_2'STDDev:0.7000

定义自定义高斯噪声层。要创建此图层,请保存文件Gaussiannoiselayer.m.在当前文件夹中。然后,创建两个高斯噪声层,配置与导入的Keras层相同。

gnLayer1 = gaussianNoiseLayer(1.5,'new_gaussian_noise_1');gnLayer2 = gaussianNoiseLayer (0.7,'new_gaussian_noise_2');

使用自定义图层替换占位符层替换剂

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

使用更新的图层图阴谋

图图(lgraph)称号(“替换图层的网络”

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

指定类名称

如果导入的分类层不包含的类,则必须预测之前,指定这些。如果你不指定类,那么软件会自动设置类12、……N, 在哪里N是课程的数量。

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

lapraph.Layers.
ans = 15x1图层数组:1“input_1”图像输入28 x28x1图片2的conv2d_1卷积20 7 x7x1旋转步[1]和填充“相同”3“conv2d_1_relu”ReLU ReLU 4 conv2d_2的卷积20 3 x3x1旋转步[1]和填充“相同”5“conv2d_2_relu”ReLU ReLU 6 new_gaussian_noise_1高斯噪声的高斯噪声标准差为1.5 7new_gaussian_noise_2高斯噪声的高斯噪声标准差为0.7 8“max_pooling2d_1”马克斯池2 x2马克斯池步(2 - 2)和填充“相同”9“max_pooling2d_2”马克斯池2 x2马克斯池步(2 - 2)和填充“相同”10 ' flatten_1 Keras平压平激活成一维假设c风格的(行)11' Flatten ' Flatten激活到1-D假设C-style(行-主要)顺序12 'concatenate_1' Depth concatenate_1' Depth concatenate_1' Fully Connected 10 Fully Connected layer 14 'activation_1' Softmax Softmax 15 'ClassificationLayer_activation_1' Classification Output crossentropyex

分类层有名称'classificationlayer_activation_1'.查看分类层并检查财产。

CLAYER = lgraph.Layers(结束)
cLayer = ClassificationOutputLayer with properties: Name: 'ClassificationLayer_activation_1' Classes: 'auto' ClassWeights: 'none' OutputSize: 'auto' Hyperparameters LossFunction: 'crossentropyex'

因为这属性为'汽车',则必须手动指定类。将类设置为0.1、……9.,然后用新的分类层替换导入的分类层。

clayer.classes = string(0:9)
Clayer =具有属性的分类OutputLayer:名称:'ClassificationLayer_Activation_1'类:[0 1 2 3 4 5 6 7 8 9]类重量:'无'输出大小:10 HyperParepers underfunction:'crossentropyex'
lgraph = replaceLayer (lgraph,'classificationlayer_activation_1',粘土);

组装网络

使用层图汇编.函数返回DAGNetwork对象是准备用于预测。

net = assemblenetwork(lgraph)
net =具有属性的dagnetwork:图层:[15x1 nnet.cnn.layer.layer]连接:[15x2表]输入名称:{'input_1'} OutputNames:{'classificationLayer_activation_1'}

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

PRELU层执行阈值操作,其中对于每个信道,小于零的任何输入值乘以标量。prelu操作是由

F X 一世 = { X 一世 如果 X 一世 > 0. 一种 一世 X 一世 如果 X 一世 0.

在哪里 X 一世 是非线性激活的输入 F 频道 一世 , 一种 一世 是控制负极部分斜率的缩放参数。下标 一世 一种 一世 表示参数可以是向量,非线性激活可以在不同的信道上变化。

importKerasNetworkimportKerasLayers可以导入包含PReLU层的网络。这些函数支持标量值和向量值缩放参万博1manbetx数。如果缩放参数是一个矢量,那么该函数将用矢量元素的平均值替换矢量。您可以修改PReLU层,使其在导入后具有向量值缩放参数。

指定要导入的网络文件。

modelfile =.“digitsDAGnetwithPReLU.h5”

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

导入网络架构和权重模数

图层= importKeraslayers(模数,'ImportWeights',真正的);
警告:图层'p_re_lu_1'是一个带矢量值参数的proLu层。该函数用矢量元素的平均值替换参数。导入后,您可以将参数更改回向量。

importKerasLayers功能显示PRELU层的警告p_re_lu_1.函数代替的向量值缩放参数p_re_lu_1向量元素的平均值。您可以将参数更改回矢量。首先,通过查看PReLU层的索引财产。

图层.Layers.
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,最初具有用于频道尺寸的矢量值缩放参数。

tempLayer = layers.Layers (4)
tempLayer = PreluLayer with properties: Name: 'p_re_lu_1' RawAlpha: [20x1 single] Learnable Parameters Alpha: 0.0044显示所有属性

RawAlpha属性包含向量值缩放参数,以及Α属性包含标量,该标量是向量值的元素平均值。重塑RawAlpha将矢量值放在第三维中,这对应于通道尺寸。然后,替换Α随着重塑的RawAlpha值。

templayer.alpha = Rehape(templayer.rawalpha,[1,1,numel(templayer.rawalpha)])
tempLayer = PreluLayer with properties: Name: 'p_re_lu_1' RawAlpha: [20x1 single] Learnable Parameters Alpha: [1x1x20 single]显示所有属性

更换p_re_lu_1层数tempLayer

图层=替换器(图层,'p_re_lu_1',tempLayer);layers.Layers(4)
RawAlpha: [20x1 single] Learnable Parameters Alpha: [1x1x20 single]显示所有属性

现在,p_re_lu_1层具有矢量值缩放参数。

输入参数

全部收缩

包含网络架构的模型文件的名称,以及可能指定为字符向量或字符串标量的权重。该文件必须位于当前文件夹中,在MATLAB上的文件夹中®路径,否则必须包含文件的完整路径或相对路径。

如果模数包括

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

  • 只有网络架构,那么它可以在HDF5或JSON中(.JSON.) 格式。

如果模数仅包含网络架构,然后您可以选择使用使用权重'ImportWeights'“WeightFile”名称-值对参数。如果您提供权重,那么权重文件必须是HDF5格式。

例子:'digitsnet.h5'

数据类型:char|字符串

名称 - 值对参数

指定可选的逗号分离对名称,价值论点。的名字是参数名称和价值为对应值。的名字必须出现引号内。您可以按照任何顺序指定多个名称和值对参数name1,value1,...,namen,valuen

例子:ImportKerasLayers(Modeloleile,'OuthantLayerType','分类')从模型文件中导入网络层模数并在Keras层的端增加了对一个分类问题的输出层。

当时,函数附加到导入的网络体系结构末端的输出层类型模数没有指定丢失函数,指定为“分类”'回归',或'pixelclassification'.附加A.pixelClassificationLayer(电脑视觉工具箱)对象需要计算机Vision Toolbox™。

如果是网络模数具有多个输出,那么就可以不使用指定该参数输出层的类型。importKerasLayers为输出插入占位符层。导入后,你可以找到和使用替换占位符层findPlaceholderLayers替换剂, 分别。

例子:'outputlayertype','回归'

网络输入图像的大小,指定为两个或三个数值对应的向量[高度宽度]用于灰度图像和[高度,宽度,频道]分别用于彩色图像。网络使用此信息模数不指定输入大小。

如果是网络模数有多个输入,则不能使用此参数指定输入大小。importKerasLayers插入输入的占位符层。导入后,你可以找到和使用替换占位符层findPlaceholderLayers替换剂, 分别。

例子:“ImageInputSize”,[28 28]

指示灯以进口权以及网络架构,指定为错误的真正的

  • 如果'ImportWeights'真正的模数那么,包括权重importKerasLayers进口重量模数,它必须具有HDF5(.h5) 格式。

  • 如果'ImportWeights'真正的模数不包含权重,则必须指定包含权重的单独文件,使用“WeightFile”名称值对参数。

例子:'Importuights',真实

数据类型:逻辑

权重文件名,从中导入权重模数不包括权重,指定为字符向量或字符串标量。要使用此名称值对参数,您还必须设置'ImportWeights'真正的

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

例子:'WeightFile', 'weights.h5'

数据类型:char|字符串

输出参数

全部收缩

网络架构,返回AS当Keras网络为类型时,使用数组对象顺序或返回为分层图当Keras网络类型为类型时模型

限制

  • importKerasLayers万博1manbetx支持Tensorflow-Keras版本如下:

    • 该功能完全支持TensorFlow-K万博1manbetxeras 2.2.4版本。

    • 该函数提供了对TensorFlow-Keras版本2.2万博1manbetx.5到2.4.0的有限支持。

更多关于

全部收缩

万博1manbetx支持的克拉斯层面

importKerasLayers万博1manbetx支持以下TensorFlow-keras图层类型进行转换为内置MATLAB层,具有一些限制。

Tensorflow-keras层 相应的深层学习工具箱层
添加 附加学者

激活,带有激活名称:

  • 'elu'

  • “relu”

  • “线性”

  • “softmax”

  • 'sigmoid'

  • '嗖嗖'

  • “正切”

层数:

高级激活:

  • elu.

  • softmax.

  • LeakyReLU

  • prelu.*

层数:

AveragePooling2D 普通Pooling2dlayer.paddingsvalue.指定为“的意思是”
BatchNormalization batchNormalizationLayer
双向(LSTM(__)) bilstmLayer
连接 深度扫描层
Conv2d. convolution2dLayer
conv2dtranspose. transposedConv2dLayer
CuDNNGRU 格拉勒
Cudnnlstm. lstmlayer.
稠密 全康统计层
Depthwiseconv2d. groupedConvolution2dLayer
退出 dropoutLayer
嵌入 WordembeddingLayer.(文本分析工具箱)
拼合 nnet.keras.layer.FlattenCStyleLayer
GlobalAveragePooling2D globalAveragePooling2dLayer
GlobalMaxPooling2D globalMaxPooling2dLayer
gru. 格拉勒
输入 imageInputLayersequenceInputLayer,或featureInputLayer.
LSTM lstmlayer.
MaxPooling2D maxPooling2dLayer
multiplicationLayer
separableconv2d. groupedConvolution2dLayerconvolution2dLayer
划分 sequenceFoldingLayer包裹层之前,和sequencfoldinglayer.缠绕层后
Upsampling2d. resize2dLayer(图像处理工具箱)
Upsampling3d. resize3dlayer.(图像处理工具箱)
ZeroPadding2D nnet.keras.layer.zeropadding2dlayer.

*对于prelu层,importKerasLayers用向量元素的平均值替换向量值缩放参数。您可以在导入后将参数更改回矢量。例如,看到进口keras prelu层

万博1manbetx支持Keras Loss功能

importKerasLayers万博1manbetx支持以下Keras loss功能:

  • mean_squared_error

  • categorical_crossentropy

  • sparse_categorical_crossentropy

  • binary_crossentropy

提示

  • 如果网络包含一个层张量流模型的深度学习工具箱转换器不支持(见万博1manbetx万博1manbetx支持的克拉斯层面), 然后importKerasLayers在不支持的层上插入一个占位符层。万博1manbetx要查找网络中不支持的层的名称和索引,请使用万博1manbetxfindPlaceholderLayers函数。然后,您可以将占位符层替换为您定义的新层。要替换一个图层,请使用替换剂

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

    • 如果网络是一系列网络,则阵列中直接替换层。例如,层(2)= newlayer;

    • 如果网络是一个DAG网络,则使用替换层替换剂.例如,看到从佩带的Keras层组装网络

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

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

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

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

    有关预处理图像进行培训和预测的更多信息,请参阅深度学习的预处理图像

选择功能

importKerasNetworkimportKerasLayers以HDF5或JSON格式导入Tensorflow-Keras网络。如果TensorFlow网络处于保存的型号格式,请使用importtensorflownetwork.importTensorFlowLayers

参考

[1]凯拉斯:Python Deep学习库https://keras.io

在R2017B中介绍