从Keras网络导入层
下载并安装用于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'}
绘制网络架构图。
情节(层)
指定要导入的网络文件。
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)标题(“进口网络”)
替换占位符图层
要替换占位符层,首先确定要替换的层的名称。使用。查找占位符层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)标题(“替换图层的网络”)
指定类名
如果导入的分类层不包含类,则必须在预测之前指定这些类。如果不指定类,则软件会自动将类设置为1
,2
、……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'
因为类
该层的属性为“汽车”
,必须手动指定类。请将类设置为0
,1
、……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运算由
在哪里 是非线性激活的输入吗 频道 和 为控制负部分斜率的缩放参数。下标 在 表示参数可以是一个矢量,并且非线性激活可以在不同的通道上变化。
进口卡拉斯网络
和进口卡拉斯层
可以导入包含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
层有一个向量值缩放参数。
modelfile
- - - - - -Keras模型文件的名称包含网络架构的模型文件的名称,可能还有权重,指定为字符向量或字符串标量。该文件必须在当前文件夹中,在MATLAB的一个文件夹中®路径,或者必须包含文件的完整路径或相对路径。
如果modelfile
包括
网络架构和权重,那么它必须在HDF5 (.h5
)的格式。
只有网络架构,然后它可以是HDF5或JSON (. json
)的格式。
如果modelfile
只包含网络体系结构,然后可以选择使用“ImportWeights”
和“WeightFile”
名称-值对参数。如果提供权重,则权重文件必须为HDF5格式。
例子:“digitsnet.h5”
数据类型:字符
|字符串
指定可选的逗号分隔的对名称,值
参数。的名字
参数名和价值
是对应的值。的名字
必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家
.
importKerasLayers (modelfile“OutputLayerType”、“分类”)
从模型文件中导入网络层modelfile
并在Keras层的末尾添加了一个用于分类问题的输出层。
“OutputLayerType”
- - - - - -输出层类型“分类”
|“回归”
|“pixelclassification”
输入时,函数附加到导入的网络体系结构末尾的输出层类型modelfile
没有指定损失函数,指定为“分类”
,“回归”
,或“pixelclassification”
.附加一个pixelClassificationLayer
(计算机视觉工具箱)对象需要计算机视觉工具箱™。
如果一个网络modelfile
有多个输出,则不能使用此参数指定输出层类型。进口卡拉斯层
插入输出的占位符层。导入后,可以使用查找和替换占位符层findPlaceholderLayers
和replaceLayer
,分别。
例子:“OutputLayerType”、“回归”
“ImageInputSize”
- - - - - -输入图像大小网络输入图像的大小,指定为两个或三个数值对应的向量(高度、宽度)
对于灰度图像和(高度、宽度、渠道)
为彩色图像,分别。网络使用这些信息时modelfile
没有指定输入大小。
如果一个网络modelfile
如果有多个输入,则不能使用此参数指定输入大小。进口卡拉斯层
为输入插入占位符层。导入之后,您可以使用findPlaceholderLayers
和replaceLayer
,分别。
例子:“ImageInputSize”,[28 28]
“ImportWeights”
- - - - - -导入权重指标假
(默认)|符合事实的导入权重的指标以及网络架构,指定为其中之一假
或符合事实的
.
如果“ImportWeights”
是符合事实的
和modelfile
包括重量,然后进口卡拉斯层
从modelfile
,其中必须有HDF5 (.h5
)的格式。
如果“ImportWeights”
是符合事实的
和modelfile
不包含权重,则必须指定包含权重的单独文件,使用“WeightFile”
名称-值对的论点。
例子:“ImportWeights”,真的
数据类型:逻辑
“WeightFile”
- - - - - -体重文件名权重文件名,当从其中导入权重时modelfile
不包括作为字符向量或字符串标量指定的权重。要使用此名称-值对参数,还必须设置“ImportWeights”
来符合事实的
.
权重文件必须在当前文件夹中,在MATLAB路径上的文件夹中,或者必须包含文件的完整或相对路径。
例子:“WeightFile”、“weights.h5”
数据类型:字符
|字符串
层
——网络体系结构层
数组对象|LayerGraph
对象网络架构,作为一个层
Keras网络类型为时的数组对象顺序
,或返回为LayerGraph
对象,当Keras网络为类型时模型
.
进口卡拉斯层
金宝app支持TensorFlow-Keras版本如下:
该功能完全支持TensorFlow-K金宝apperas 2.2.4版本。
该功能对TensorFlow Keras版本2.2.5至金宝app2.4.0提供有限的支持。
进口卡拉斯层
金宝app支持以下TensorFlow-Keras层类型转换为内置MATLAB层,但有一些限制。
TensorFlow-Keras层 | 对应的深度学习工具箱层 |
---|---|
添加 |
additionLayer |
|
层: |
先进的激活:
|
层:
|
AveragePooling2D |
averagePooling2dLayer 与PaddingValue 指定为“中庸” |
BatchNormalization |
batchNormalizationLayer |
双向(LSTM (__)) |
双层膜 |
连接 |
depthConcatenationLayer |
Conv2D |
卷积层 |
Conv2DTranspose |
transposedConv2dLayer |
库德宁格鲁 |
gruLayer |
CuDNNLSTM |
lstmLayer |
密集的 |
fullyConnectedLayer |
DepthwiseConv2D |
groupedConvolution2dLayer |
辍学 |
落花人 |
嵌入 |
wordEmbeddingLayer (文本分析工具箱) |
平 |
nnet.keras.layer.FlattenCStyleLayer |
GlobalAveragePooling2D |
globalAveragePooling2dLayer |
GlobalMaxPooling2D |
GlobalMapooling2DLayer |
格勒乌 |
gruLayer |
输入 |
imageInputLayer ,sequenceInputLayer ,或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功能:
均方误差
categorical_crossentropy
sparse_categorical_crossentropy
binary_crossentropy
如果网络包含一个层TensorFlow模型的深度学习工具箱转换器不支持(见金宝app金宝app支持Keras层),然后进口卡拉斯层
在不支持的层上插入一个占位符层。金宝app要查找网络中不支持的层的名称和索引,请使用金宝appfindPlaceholderLayers
作用然后,可以使用定义的新图层替换占位符图层。要替换图层,请使用replaceLayer
.
您可以将占位符层替换为您定义的新层。
如果网络是串联网络,则直接替换阵列中的层。例如,层(2)=新层;
.
如果网络是DAG网络,则使用replaceLayer
.例如,请参见从预先训练的Keras层组装网络.
您可以导入具有多个输入和多个输出(MIMO)的Keras网络。使用进口卡拉斯网络
如果网络包含输入的输入大小信息和输出的损失信息。否则,使用进口卡拉斯层
.的进口卡拉斯层
函数为输入和输出插入占位符层。导入之后,您可以使用findPlaceholderLayers
和replaceLayer
,分别。导入MIMO Keras网络的工作流与导入MIMO ONNX™网络的工作流相同。例如,请参见导入并组装具有多个输出的ONNX网络.要了解具有多个输入和多个输出的深度学习网络,请参见多输入多输出网络.
要使用预先训练的网络对新图像进行预测或迁移学习,必须以与用于训练导入模型的图像的预处理相同的方式对图像进行预处理。最常见的预处理步骤是调整图像大小,减去图像平均值,以及将图像从BGR图像转换为RGB图像。
有关用于训练和预测的预处理图像的更多信息,请参见深度学习的图像预处理.
使用进口卡拉斯网络
或进口卡拉斯层
导入HDF5或JSON格式的TensorFlow-Keras网络。如果TensorFlow网络是保存的模型格式,则使用importTensorFlowNetwork
或输入流层
.
[1]Keras: Python深度学习库.https://keras.io.
assembleNetwork
|exportONNXNetwork
|findPlaceholderLayers
|importCaffeLayers
|importCaffeNetwork
|进口卡拉斯网络
|importONNXLayers
|importONNXNetwork
|输入流层
|importTensorFlowNetwork
|replaceLayer
你点击一个链接对应于这个MATLAB命令:
通过在MATLAB命令窗口中输入命令来运行命令。Web浏览器不支持MATLAB命令。金宝app
您还可以从以下列表中选择网站:
选择中国网站(中文或英文)以获得最佳网站性能。其他MathWorks国家站点没有针对您所在位置的访问进行优化。