1、读取数据 digitDatasetPath=fullfile(matlabroot,'toolbox','nnet','nndemos','nndatasets','DigitDataset'); imds=imageDatastore(digitDatasetPath,'IncludeSubfolders',true,'LabelSource','foldernames'); numTrainingFiles=0.75; [imdsTrain,imdsTest]=splitEachLabel(imds,numTrainingFiles,'randomized'); 2、神经网络架构 layers=[... imageInputLayer([28 28 1]); convolution2dLayer(5,6,'Stride',1,'Padding','same'); reluLayer maxPooling2dLayer(2,'Stride',2,'Padding','same') convolution2dLayer(5,16,'Stride',1,'Padding','same'); reluLayer maxPooling2dLayer(2,'Stride',2,'Padding','same') fullyConnectedLayer(120) reluLayer fullyConnectedLayer(84) reluLayer fullyConnectedLayer(10) softmaxLayer classificationLayer ]; 3、超参数设置 options=trainingOptions('adam',... 'ExecutionEnvironment','auto','MaxEpochs',30,... 'InitialLearnRate',1e-3,'Verbose',false,'Plots','training-progress'); 4、神经网络训练 net=trainNetwork(imdsTrain,layers,options); 5、预测和输出 Ypred=classify(net, imdsTest); YTest=imdsTest.Labels; accuracy=sum(Ypred==YTest)/numel(YTest) fprintf('精确值为:%5.2f%%\n',accuracy*100); clear I=imread('风扇.png'); net = squeezenet; %net = resnet50('Weights','none') inputSize=net.Layers(1).InputSize; I_resize=imresize(I,inputSize(1:2)); label=classify(net,I_resize,'ExecutionEnvironment','cpu'); 6、输出图片 figure subplot(1,4,1),plot(layerGraph(net.Layers)); subplot(1,4,2),imshow(I); subplot(1,4,3),imshow(I_resize); subplot(1,4,4),imshow(I_resize);title(string(label))
时间: 2024-01-14 08:02:29 浏览: 29
这段代码主要涉及了使用MATLAB深度学习工具箱对手写数字数据集进行卷积神经网络的训练和使用SqueezeNet进行图像分类的操作。
1. 读取数据:使用MATLAB自带的手写数字数据集,将其路径设置为digitDatasetPath,并用imageDatastore函数读取数据,并通过splitEachLabel函数将数据集分为训练集和测试集。
2. 神经网络架构:构建了一个包含多个卷积层、池化层和全连接层的卷积神经网络,其中包含28x28x1的输入层,5x5卷积核的卷积层,2x2最大池化层,全连接层等。
3. 超参数设置:设置了Adam优化器、最大迭代次数、初始学习率等超参数。
4. 神经网络训练:使用trainNetwork函数进行神经网络的训练,输入训练集、网络结构和超参数。
5. 预测和输出:使用classify函数对测试集进行预测,并与测试集标签进行比较,计算分类精确度。最后使用imshow函数输出风扇图片和SqueezeNet预测结果。
6. 输出图片:使用subplot函数将多张图片放在同一图像窗口中展示,包括神经网络结构图、原始图片、缩放后的图片和SqueezeNet分类结果。
需要注意的是,这段代码中SqueezeNet是使用MATLAB深度学习工具箱中自带的预训练模型,而不是自己训练的。
相关问题
以下代码出现函数或变量 'Net_Built' 无法识别的错误,请改正确:%% 导入数据 digitDatasetPath = fullfile(matlabroot,'toolbox','nnet','nndemos', ... 'nndatasets','DigitDataset'); imds = imageDatastore(digitDatasetPath, ... 'IncludeSubfolders',true,'LabelSource','foldernames'); % 图像展示 figure; perm = randperm(10000,20); for i = 1:20 subplot(4,5,i); imshow(imds.Files{perm(i)}); end %% 数据整理与归一化 labelCount = countEachLabel(imds);% 查看各类图片的数量及对应的分类标签 img = readimage(imds,1); % 设置输入图像的大小 fprintf('输入图像的大小为:'); disp(size(img)); % 指定训练集和测试集合 numTrainFiles = 750; % 指定训练集总共包含750个图像 [imdsTrain,imdsValidation] = splitEachLabel(imds,numTrainFiles,'randomize'); % 将图片与对应的标签分开,即分成输入与输出 %% 网络定义以及训练 [layers,options] = Net_Built(imdsValidation); analyzeNetwork(layers); net = trainNetwork(imdsTrain,layers,options); %% 网络分类预测 YPred = classify(net,imdsValidation); YValidation = imdsValidation.Labels; accuracy = sum(YPred == YValidation)/numel(YValidation); fprintf('分类测试的正确率为:'); disp(accuracy); plot(YPred); hold on plot(YValidation); hold off legend('预测分类','实际分类'); title('CNN实际测试情况'); xlabel('样本'); ylabel('分类数值');
该代码中的错误是 `Net_Built` 函数或变量未定义。可能是因为该函数或变量未在代码中定义或者在代码的其他位置定义了。
为了解决这个问题,你需要定义 `Net_Built` 函数或变量,或者将其替换为已定义的函数或变量。
例如,你可以将 `Net_Built` 替换为一个现有的卷积神经网络模型,例如 ResNet 或 VGG。或者你可以自己编写一个函数来定义网络结构。以下是一个自定义网络结构的示例代码:
```matlab
function [layers,options] = Net_Built(imdsValidation)
% 定义网络结构
layers = [
imageInputLayer([28 28 1])
convolution2dLayer(5, 20)
batchNormalizationLayer
reluLayer
maxPooling2dLayer(2, 'Stride', 2)
fullyConnectedLayer(10)
softmaxLayer
classificationLayer];
% 定义训练选项
options = trainingOptions('adam', ...
'MaxEpochs', 5, ...
'MiniBatchSize', 128, ...
'Shuffle', 'every-epoch', ...
'Verbose', false, ...
'Plots', 'training-progress');
end
```
将上述代码添加到你的代码中,即可解决 `Net_Built` 未定义的问题。
file=fullfile(pathname,filename)
该函数用于将文件名和路径合并成一个完整的文件路径。其中,pathname是文件所在路径,filename是文件名,file是完整的文件路径。函数返回一个字符串,即完整的文件路径。
示例:
假设当前路径为C:\Documents,有一个文件test.txt在C:\Documents\Files目录下,则可以使用以下代码获取该文件的完整路径:
```
filename = 'test.txt';
pathname = 'C:\Documents\Files';
file = fullfile(pathname, filename);
```
执行后,变量file的值为'C:\Documents\Files\test.txt'。