装配多输出网络进行预测

不使用模型函数进行预测,您可以将网络组装成aDAGNetwork准备使用functionToLayerGraphassembleNetwork功能。这样就可以使用预测函数。

加载模型函数和参数

从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函数不包括输入和输出层。属性在层图中添加输入层、分类层和回归层addLayersconnectLayers功能。

层= 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);结束

另请参阅

||||||||

相关话题