【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用

基于MATLAB2019a。---和同学一起完成老师给的作业。

在MATLAB中这两种框架的神经网络是已经经过训练的网络,官方的数据是使用了百万张训练了大约100多个类别的物品,也就是大概可以识别一千多种物品。在深度学习中训练神经网络是一个对硬件要求极高的项目,内部涉及大量的矩阵运算,用CPU训练绝对是一件令人头秃的工作,推荐使用GPU训练(虽然我是没那个条件。。。)。一开始是使用的AlexNet后来专用VGG16,两者的差别在使用时主要体现在图像输入环节。(仅限使用)

对比两种神经网络: 

 AlexNet: 网络深度为8层,网络的图像输入大小为227×227。

VGG-16: 网络深度为16层,网络的图像输入大小为224×224。

目前对于训练和使用这两个神经网络有用的信息

左AlexNet;右VGG16。

【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第1张图片

 使用神经网络识别图片的核心步骤:

1、将图片做处理,使符合特定网络图像输入大小的要求。(数组放缩就可以)

%从文件夹中选取图片并做处理
[filename,pathname]=uigetfile({'*.jpg';'*.*'},'请选择一张用于识别的照片');
filepath=[pathname,filename];
axes(h_axes1);
data = imread(filepath);
data = imresize(data,[224,224]);
 

%获取神经网络输入图像数据格式

data1 = data(1:224,1:224,1:3);              %vgg16是 [224,224,3]
%最终交由VGG16识别的使data1数组

2、丢到神经网络中,用固定函数筛选出符合图像的标签

net = network;          %network为VGG16类型的神经网络训练后返回来的句柄

label = classify(net,data1);    %classify函数直接导出标签
image(data1);
title(char(label));

 训练神经网络识别图片的核心步骤:

function predict_transfer_alexnet()
global network    %待训练vgg16网络的句柄

net = vgg16;% 深度学习vgg16经典网络结构,没有的可以去matlab center下载
trainsferLayer = net.Layers(1:end-3);

imds = imageDatastore('E:\University\Desktop\Matlab\GUI code(1)\practice_Pictures',...%训练图片数据库地址
    'includeSubfolders',true,...
    'labelsource','foldernames','ReadFcn',@IMAGERESIZE);
T = countEachLabel(imds);
disp(T);
[imdsTrain,imdsTest] = splitEachLabel(imds,0.8);%0.8为训练数据,0.2为测试数据(测试精度会被输出)

%% train
layers = [trainsferLayer;
    fullyConnectedLayer(10,'WeightLearnRateFactor',50,'BiasLearnRateFactor',50);%注意第一个参数为类别的数量,我这里是10
    softmaxLayer();
    classificationLayer()];
options = trainingOptions('sgdm',...
    'Maxepochs',10,... %最大训练次数
    'InitialLearnRate',0.00035); %初始学习比率(这个需要调试)
network = trainNetwork(imdsTrain,layers,options);

 %% predict
predictLabels = classify(network,imdsTest);
testLabels = imdsTest.Labels;
accuracy = sum(predictLabels == testLabels)/numel(predictLabels);
disp(['accuracy:',num2str(accuracy)]); % 输出预测精度结果
function output = IMAGERESIZE(input)
input = imread(input);
if numel(size(input)) == 2
    input = cat(3,input,input,input);% 转成3通道的(vgg16要求使三通道)
end
output = imresize(input,[224,224]);

end
end

训练效果(实拍图识别):【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第2张图片

 

【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第3张图片

 【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第4张图片

 【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第5张图片

 

【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第6张图片

 【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第7张图片

 【MATLAB、深度学习】AlexNet及VGG神经网络在MATLAB上的应用_第8张图片

工程链接:链接:https://pan.baidu.com/s/16EAw26jD1_1XlR4roApq4A 提取码:ilh2

你可能感兴趣的:(MATLAB,深度学习)