卷积神经网络程序(迁移学习)构成

实例需求

基于共享参数的迁移学习的原理,对AlexNet进行改进,并用样本数据进行训练,实现对输入图像的识别。

开发步骤

  1. 加载图像数据,并将其划分为训练集与验证集
  2. 加载预训练好的网络(AlexNet)
  3. 对网络结构进行改进
  4. 调整数据集
  5. 训练网络
  6. 进行验证并显示效果

代码(MATLAB)

加载图像数据,并将其划分为训练集与验证集
clc,clear; 
unzip('MerchData.zip');  
imds= imageDatastore('MerchData', ...
    'IncludeSubfolders',true,'LabelSource','foldernames');
[imdsTrain,imdsValidation] = splitEachLabel(imds,0.7,'randomize'); 
%将样本按照7:3随机分为训练集与验证集
numTrainImages = numel(imdsTrain.Labels);%统计用于训练样本的数量
idx = randperm(numTrainImages,16);
figure
for i = 1:16
    subplot(4,4,i)    
    I=readimage(imdsTrain,idx(i));
    imshow(I)
end
%该部分挑选出16张图片显示用于确定图像数据是否被导入
加载预训练好的网络并对网络结构进行改进
net=alexnet;%加载训练好的网络
layersTransfer=net.Layers(1:end-3); %保留AlexNet倒数第三层之前的网络
numClasses=numel(categories(imdsTrain.Labels));%确定训练集中需要分类的种类
layers = [
    layersTransfer %保留倒数第三层之前的网络
    fullyConnectedLayer(numClasses)%将全连接层的输出设置为训练数据中的种类
    softmaxLayer  %添加新的softmaxlayer
    classificationLayer ];     %添加新的分类层
%构建新的网络,保留AlexNet倒数第三层之前的网络,再次在此之后重新添加了全连接层
调整数据集
inputSize = net.Layers(1).InputSize; %查看网络输入层的大小和通道数
augimdsTrain = augmentedImageDatastore(inputSize(1:2),imdsTrain);
%将批量训练图像的大小调整为与输入层的大小相同
augimdsValidation = augmentedImageDatastore(inputSize(1:2),imdsValidation);
%将批量验证图像的大小设置为与输入层大小相同
对网络进行训练
options = trainingOptions('sgdm', ...%动量随机梯度下降
    'MiniBatchSize',15, ...%小批量样本数为15
    'MaxEpochs',10, ...%训练最大轮数
    'InitialLearnRate', 0.00005, ...  %初始学习率为0.00005
    'Shuffle', 'every-epoch', ...%数据打乱选项,此处为每一轮都打乱
    'ValidationData', augimdsValidation, ...%指定训练期间所用的验证数据
    'ValidationFrequency',3, ...%验证频率
    'Verbose',true, ...  %在命令窗口显示训练进度
    'Plots', 'training-progress');%绘制图像,显示训练过程
netTransfer = trainNetwork(augimdsTrain,layers,options);%用训练集对网络进行训练
[Ypred,scores]= classify(netTransfer,augimdsValidation);%对训练好的网络采用验证集进行验证
idx=randperm(numel(imdsValidation.Files),4);
figure
for i =1:4
    subplot(2,2,i)
    I = readimage(imdsValidation,idx(i));
    imshow(I)
    label = Ypred(idx(i));
    title(string(label));
end
%随机显示验证效果
计算分类准确率
YValidation= imdsValidation.Labels;   %验证集中的数据数量
accuracy = mean(Ypred==YValidation);  %mean用于计算均值
%计算分类准确率
figure
confusionchart(YValidation,Ypred) %显示迁移学习的分类矩阵
%创建并显示混淆矩阵
疑难理解

1.minibatch的理解:假设有10000个可以训练神经网络的样本,如果对每一个样本进行计算并根据误差调整网络的权重,这种方法叫做随机梯度下降法(SGD)用这些数据对深度神经网络训练一轮,需要调整10000次权重,由于样本中存在优质样本,也存在垃圾样本。为了解决垃圾样本带来的不稳定性,科学家尝试过将10000个样本算出的权重更新值取平均,然后调整一次权重,但是这样的话对10000个样本进行计算只调整一次权重导致权重调整太慢。
最后科学家选取了一个折中方法,比如对10000个样本分别进行计算,但把10000个样本分成100组,对每一组中的100个样本的权重更新值取平均,这样就可以进行100次权重调整
2.ValidationFrequency:验证的频率。即每一轮中计算精度。损失函数的次数,在matlab中用每一轮的迭代次数来展示。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值