主要内容

使用函数模型做出预测

这个例子展示了如何使用一个模型预测数据分割到mini-batches函数。

对于大型的数据集,或者当预测硬件有限的内存,将数据分拆为mini-batches作出预测。进行预测时SeriesNetworkDAGNetwork对象时,预测函数自动将输入数据分为mini-batches。对于模型的功能,您必须手动将数据分成mini-batches。

创建模型函数和负载参数

加载垫的模型参数文件digitsMIMO.mat。垫文件包含在结构模型参数命名参数在结构,模型状态命名状态,类名一会

s =负载(“digitsMIMO.mat”);参数= s.parameters;状态= s.state;一会= s.classNames;

该模型函数模型年底上市,这个例子中,定义了模型的模型参数和状态。

负荷预测的数据

负荷预测的数字数据。

digitDatasetPath = fullfile (matlabroot,“工具箱”,“nnet”,“nndemos”,“nndatasets”,“DigitDataset”);imd = imageDatastore (digitDatasetPath,“IncludeSubfolders”,真的,“LabelSource”,“foldernames”);numObservations =元素个数(imds.Files);

作出预测

循环的mini-batches测试数据并作出预测使用自定义预测循环。

使用minibatchqueue处理和管理mini-batches图像。指定一个mini-batch大小为128。设置读取图像数据存储的大小属性mini-batch大小。

为每个mini-batch:

  • 使用自定义mini-batch预处理功能preprocessMiniBatch(在这个例子中定义)将数据合并到一个批处理和图像正常化。

  • 格式的图像尺寸“SSCB”(空间、空间、通道、批)。默认情况下,minibatchqueue把数据转换为对象dlarray对象与基本类型

  • 对GPU如果一个可用作预测。默认情况下,minibatchqueue将输出转换为对象gpuArray如果一个GPU是可用的。使用GPU需要并行计算工具箱™和支持GPU设备。金宝app支持设备的信息,请参阅金宝appGPU计算的需求(并行计算工具箱)

miniBatchSize = 128;洛桑国际管理发展学院。ReadSize = miniBatchSize;兆贝可= minibatchqueue (imd,“MiniBatchSize”miniBatchSize,“MiniBatchFcn”@preprocessMiniBatch,“MiniBatchFormat”,“SSCB”);

循环的minibatches数据并作出预测使用预测函数。使用onehotdecode函数来确定类标签。存储预测类标签。

doTraining = false;Y1Predictions = [];Y2Predictions = [];%在mini-batches循环。hasdata(兆贝可)% mini-batch读取的数据。dlX =下一个(兆贝可);%使用预测函数进行预测。[dlY1Pred, dlY2Pred] =模型(参数、dlX doTraining、状态);%确定相应的类。Y1PredBatch = onehotdecode (dlY1Pred一会1);Y1Predictions = [Y1Predictions Y1PredBatch];Y2PredBatch = extractdata (dlY2Pred);Y2Predictions = [Y2Predictions Y2PredBatch];结束

视图的一些图片和他们的预测。

idx = randperm (numObservations 9);图i = 1:9次要情节(3 3 i) i = imread (imds.Files {idx (i)});imshow (I)深圳=大小(我,1);抵消= sz / 2;thetaPred = Y2Predictions (idx (i));情节(抵消* [1-tand (thetaPred) 1 +罐内(thetaPred)], [sz 0],“r——”)举行标签=字符串(Y1Predictions (idx (i)));标题(”的标签:“+标签)结束

模型函数

这个函数模型将模型参数参数,输入数据dlX的国旗doTraining它指定是否为培训或预测模型应该返回输出,和网络状态状态。网络输出标签的预测,预测的角度,更新网络状态。

函数[dlY1、dlY2] =模型(参数、dlX doTraining,状态)%卷积重量= parameters.conv1.Weights;偏见= parameters.conv1.Bias;海底= dlconv (dlX、权重、偏见,“填充”,“相同”);%批正常化,ReLU抵消= parameters.batchnorm1.Offset;规模= parameters.batchnorm1.Scale;trainedMean = state.batchnorm1.TrainedMean;trainedVariance = state.batchnorm1.TrainedVariance;如果doTraining[海底,trainedMean trainedVariance] = batchnorm(海底、抵消、规模、trainedMean trainedVariance);%更新状态state.batchnorm1。TrainedMean = TrainedMean;state.batchnorm1。TrainedVariance = TrainedVariance;其他的海底= batchnorm(海底、抵消、规模、trainedMean trainedVariance);结束海底= relu(海底);%卷积,批正常化(跳过连接)重量= parameters.convSkip.Weights;偏见= parameters.convSkip.Bias;dlYSkip = dlconv(海底,重量、偏见,“步”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);结束%卷积重量= parameters.conv2.Weights;偏见= parameters.conv2.Bias;海底= dlconv(海底,重量、偏见,“填充”,“相同”,“步”2);%批正常化,ReLU抵消= parameters.batchnorm2.Offset;规模= parameters.batchnorm2.Scale;trainedMean = state.batchnorm2.TrainedMean;trainedVariance = state.batchnorm2.TrainedVariance;如果doTraining[海底,trainedMean trainedVariance] = batchnorm(海底、抵消、规模、trainedMean trainedVariance);%更新状态state.batchnorm2。TrainedMean = TrainedMean;state.batchnorm2。TrainedVariance = TrainedVariance;其他的海底= batchnorm(海底、抵消、规模、trainedMean trainedVariance);结束海底= relu(海底);%卷积重量= parameters.conv3.Weights;偏见= parameters.conv3.Bias;海底= dlconv(海底,重量、偏见,“填充”,“相同”);%批正常化抵消= parameters.batchnorm3.Offset;规模= parameters.batchnorm3.Scale;trainedMean = state.batchnorm3.TrainedMean;trainedVariance = state.batchnorm3.TrainedVariance;如果doTraining[海底,trainedMean trainedVariance] = batchnorm(海底、抵消、规模、trainedMean trainedVariance);%更新状态state.batchnorm3。TrainedMean = TrainedMean;state.batchnorm3。TrainedVariance = TrainedVariance;其他的海底= batchnorm(海底、抵消、规模、trainedMean trainedVariance);结束%,ReLU海底= dlYSkip +海底;海底= relu(海底);%完全连接,softmax(标签)重量= parameters.fc1.Weights;偏见= parameters.fc1.Bias;dlY1 = fullyconnect(海底,重量、偏见);dlY1 = softmax (dlY1);%完全连接(角度)重量= parameters.fc2.Weights;偏见= parameters.fc2.Bias;dlY2 = fullyconnect(海底,重量、偏见);结束

Mini-Batch预处理功能

preprocessMiniBatch使用以下步骤:预处理数据函数

  1. 从传入的单元阵列提取数据和连接到一个数字数组。连接在第四维度添加每个图像的三维空间,作为一个单通道维度。

  2. 标准化之间的像素值01

函数X = preprocessMiniBatch(数据)%从细胞中提取图像数据和连接X =猫(4、数据{:});%图像正常化。X = X / 255;结束

另请参阅

||||||||||

相关的话题