不使用模型函数进行预测,您可以将网络组装成aDAGNetwork
准备使用functionToLayerGraph
和assembleNetwork
功能。这样就可以使用预测
函数。
从MAT文件加载模型参数digitsMIMO.mat
。在MAT文件包含一个名为结构模型参数参数
,该模型状态在名为的结构体中状态
和类名中一会
。
S =负载(“digitsMIMO.mat”);参数= s.parameters;状态= s.state;一会= s.classNames;
该模型函数模型
在该示例的末尾列出的,定义了给定的模型参数和状态模型。
用一组固定的模型参数、模型状态定义一个匿名函数,并设置doTraining
选项假
。
doTraining = FALSE;有趣= @(DLX)模型(DLX,参数,doTraining,状态);
方法将模型函数转换为层图functionToLayerGraph
函数。创建一个变量dlX
其中包含具有预期格式的一小批数据。
X =兰特(28,28,1,128,“单一”);DLX = dlarray(X,“SSCB”);lgraph = functionToLayerGraph(有趣,dlX);
该层图形的输出由functionToLayerGraph
函数不包括输入和输出层。属性在层图中添加输入层、分类层和回归层addLayers
和connectLayers
功能。
层= imageInputLayer([28 28 1],“名字”,“输入”,'正常化',“没有”);lgraph = addLayers(lgraph,层);lgraph = connectLayers(lgraph,“输入”,“conv_1”);层= classificationLayer (“类”,类名,“名字”,“coutput”);lgraph = addLayers(lgraph,层);lgraph = connectLayers(lgraph,'sm_1',“coutput”);层= regressionLayer(“名字”,“r输出”);lgraph = addLayers(lgraph,层);lgraph = connectLayers(lgraph,'fc_1',“r输出”);
查看网络的情节。
图图(lgraph)
集合网络使用assembleNetwork
函数。
净= assembleNetwork (lgraph)
连接:[18×2表]InputNames: {'input'} OutputNames: {'coutput' 'routput'}
加载测试数据。
[XTEST,Y1Test,Y2Test] = digitTest4DArrayData;
使用集合的网络进行预测,使用预测
函数。若要返回分类输出的分类标签,请设置“ReturnCategorical”
选项真正
。
[Y1Pred,Y2Pred] =预测(净,XTEST,“ReturnCategorical”,真正的);
评估分类精度。
精度=意味着(Y1Pred = = Y1Test)
精度= 0.9644
评估回归精度。
angleRMSE =√((Y2Pred - Y2Test).^2))
angleRMSE =单5.8081
查看一些图片和他们的预测。红色显示预测的角度,绿色显示正确的标签。
idx = randperm(大小(XTest, 4), 9);数字为i = XTest(:,:,:,idx(i));imshow (I)上SZ =尺寸(I,1);偏移量= SZ / 2;thetaPred = Y2Pred(IDX(I));情节(偏移* [1-t和(thetaPred)1 + t和(thetaPred)],[SZ 0],'R--')thetaValidation = Y2Test(IDX(I));情节(偏移* [1-t和(thetaValidation)1 + t和(thetaValidation)],[SZ 0],'G - ')保持离标签=字符串(Y1Pred (idx (i)));标题(”的标签:“+标签)结束
函数模型接受输入数据dlX,即模型参数参数
的国旗doTraining
指定模型应该返回训练输出还是预测输出,以及网络状态状态
。网络输出标签的预测,角度的预测,以及更新的网络状态。
功能[dlY1、dlY2] =模型(dlX、参数、doTraining状态)卷积%W = parameters.conv1.Weights;B = parameters.conv1.Bias;海底= dlconv (dlX, W, B,'填充',2);%批次正常化,RELU抵消= parameters.batchnorm1.Offset;规模= parameters.batchnorm1.Scale;trainedMean = state.batchnorm1.TrainedMean;trainedVariance = state.batchnorm1.TrainedVariance;如果doTraining [DLY,trainedMean,trainedVariance] = batchnorm(DLY,偏移,比例trainedMean,trainedVariance);%更新状态state.batchnorm1.TrainedMean = trainedMean;state.batchnorm1.TrainedVariance = trainedVariance;其他的海底= batchnorm(海底、抵消、规模、trainedMean trainedVariance);结束海底= relu(海底);%卷积,批标准化(跳过连接)W = parameters.convSkip.Weights;B = parameters.convSkip.Bias;dlYSkip = dlconv(海底,W, B,“步”,2);偏移量= parameters.batchnormSkip.Offset;比例= parameters.batchnormSkip.Scale;trainedMean = state.batchnormSkip.TrainedMean;trainedVariance = state.batchnormSkip.TrainedVariance;如果doTraining [dlYSkip,trainedMean,trainedVariance] = batchnorm(dlYSkip,偏移,比例trainedMean,trainedVariance);%更新状态state.batchnormSkip。TrainedMean = TrainedMean;state.batchnormSkip。TrainedVariance = TrainedVariance;其他的dlYSkip = batchnorm(dlYSkip,偏移,比例trainedMean,trainedVariance);结束卷积%W = parameters.conv2.Weights;B = parameters.conv2.Bias;海底= dlconv(海底,W, B,'填充'1,“步”,2);%批次正常化,RELU抵消= parameters.batchnorm2.Offset;规模= parameters.batchnorm2.Scale;trainedMean = state.batchnorm2.TrainedMean;trainedVariance = state.batchnorm2.TrainedVariance;如果doTraining [DLY,trainedMean,trainedVariance] = batchnorm(DLY,偏移,比例trainedMean,trainedVariance);%更新状态state.batchnorm2.TrainedMean = trainedMean;state.batchnorm2.TrainedVariance = trainedVariance;其他的海底= batchnorm(海底、抵消、规模、trainedMean trainedVariance);结束海底= relu(海底);卷积%W = parameters.conv3.Weights;B = parameters.conv3.Bias;海底= dlconv(海底,W, B,'填充',1);%批标准化偏移量= parameters.batchnorm3.Offset;比例= parameters.batchnorm3.Scale;trainedMean = state.batchnorm3.TrainedMean;trainedVariance = state.batchnorm3.TrainedVariance;如果doTraining [DLY,trainedMean,trainedVariance] = batchnorm(DLY,偏移,比例trainedMean,trainedVariance);%更新状态state.batchnorm3.TrainedMean = trainedMean;state.batchnorm3.TrainedVariance = trainedVariance;其他的海底= batchnorm(海底、抵消、规模、trainedMean trainedVariance);结束%的添加,RELUDLY = dlYSkip + DLY;海底= relu(海底);%完全连接(角度)W = parameters.fc1.Weights;B = parameters.fc1.Bias;dlY2 = fullyconnect(海底,W, B);%完全连接,softmax(标签)W = parameters.fc2.Weights;B = parameters.fc2.Bias;dlY1 = fullyconnect(海底,W, B);dlY1 = softmax (dlY1);结束
assembleNetwork
|batchnorm
|dlarray
|dlconv
|fullyconnect
|functionToLayerGraph
|预测
|线性整流函数(Rectified Linear Unit)
|softmax