免费建手机网站,无锡八匹马网站建设,郑州网络营销学校,阿里巴巴网站网络营销的影响一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在#xff0c;每两个网络层之间加入一个残差连接#xff0c;缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里#xff0c;设想一个包含诺干层自网络#xff0c;子网络的函数用H(x)来表示#x…一、ResNet网络 ResNet是深度残差网络的简称。其核心思想就是在每两个网络层之间加入一个残差连接缓解深层网络中的梯度消失问题 二、残差结构 在多层神经网络模型里设想一个包含诺干层自网络子网络的函数用H(x)来表示其中x是子网络的输入。残差学习是通过重新设定这个参数让一个参数层表达一个残差函数 因此这个子网络的输出y 就是 其中 x 的操作是通过一个相当于恒等映射的跳跃连接来完成的它将残差块的输入直接与输出连接这就是残差结构。按照上面的结构递推根据前向传播第i个残差块的输出就是第i1个残差块的输入 根据递归公式可以推导出 这里的L表示任意后续残差块i是靠前块那么公式就说明了总会有信号能从浅层到深层。 从反向传播来看根据上面的公式对 Xl 进行求导可以得到 这里的 是最小损失化函数。以上说明浅层的梯度计算 总会直接加上上一个项 因为存在额外的一项所以就想 F(xi)很小总的梯度都不会消失。
三、基于ResNet识别实现步骤 其主要步骤为1.加载图像数据并将数据分为训练集合与验证集2.加载MATLAB训练好的ResNet503.和Alexnet一样替换最后几层4.按照网络配置调整图像数据5.对网络进行训练
3.1 调整ResNet实现迁移学习 针对ImageNet的数据任务原本最后三层 FC SOFTMAX 输出层是针对1000个类别的物体进行识别针对图像问题继续调整这三层首先冻结上面的层。将下面的三层进行替换。由于ResNet50需要输入的图像大小为224 * 224 *3.
unzip(MerchData.zip);
img_ds imageDatastore(MerchData, ...IncludeSubfolders,true, ...LabelSource,foldernames);total_split countEachLabel(img_ds); %返回一个包含每个标签和相应图像数量的表格num_images length(img_ds.Labels); %返回的图像的个数5个类型都有15张照片
perm randperm(num_images,10); %随机取出10个
figure
for i 1:9subplot(3,3,i)imshow(imread(img_ds.Files{perm(i)})); %从图像数据集 (img_ds) 中读取一张图像并显示它%可以用alexnet的方法
endtest_idx randperm(num_images,9); %随机取5张做样本
img_ds_Test subset(img_ds,test_idx);
train_idx setdiff(1:length(img_ds.Files),test_idx);
img_ds_Train subset(img_ds,train_idx);%% 步骤2加载预训练好的网络% 加载ResNet50网络注该网络需要提前下载当输入下面命令时按要求下载即可
net resnet50;%% 步骤3对网络结构进行调整替换最后几层% 获取网络图结构
LayerGraph layerGraph(net);
clear net;% 确定训练数据中新冠图片标签类别数量5类
numClasses numel(categories(img_ds_Train.Labels));
disp(numClasses);% 保留ResNet50倒数第三层之前的网络并替换后3层
% 倒数第三层的全连接层这里修改为5类
newLearnableLayer fullyConnectedLayer(numClasses,...Name,new_fc,...WeightLearnRateFactor,10,...
BiasLearnRateFactor,10);
%numClasses 分类任务。通过设置 WeightLearnRateFactor 和 BiasLearnRateFactor
%来控制学习率的调整使得这些层在训练过程中能更快速地学习
% 分别替换最后3层fc1000、softmax和分类输出层
LayerGraph replaceLayer(LayerGraph,fc1000,newLearnableLayer);
%替换了原网络中的 fc1000 层ResNet50 中的全连接层为 new_fc 层
% 即刚才定义的新的全连接层。replaceLayer 函数通过层的名字来替换图层newSoftmaxLayer softmaxLayer(Name,new_softmax);
LayerGraph replaceLayer(LayerGraph,fc1000_softmax,newSoftmaxLayer);newClassLayer classificationLayer(Name,new_classoutput);
LayerGraph replaceLayer(LayerGraph,ClassificationLayer_fc1000,newClassLayer);%% 步骤4按照网络配置调整图像数据% 输入图像格式转换这里调用了自定义函数preprocess
img_ds_Train.ReadFcn (filename)preprocess(filename);
img_ds_Test.ReadFcn (filename)preprocess(filename);% 数据增强的参数
augmenter imageDataAugmenter(...RandRotation,[-5 5],...RandXReflection,1,...RandYReflection,1,...RandXShear,[-0.05 0.05],...RandYShear,[-0.05 0.05]);
% 将批量训练图像的大小调整为与输入层的大小相同
aug_img_ds_train augmentedImageDatastore([224 224],img_ds_Train,DataAugmentation,augmenter);
% 将批量测试图像的大小调整为与输入层的大小相同
aug_img_ds_test augmentedImageDatastore([224 224],img_ds_Test);%% 步骤5对网络进行训练% 对训练参数进行设置
options trainingOptions(adam,...MaxEpochs,10,...MiniBatchSize,8,...Shuffle,every-epoch,...InitialLearnRate,1e-4,...Verbose,false,...Plots,training-progress,...ExecutionEnvironment,cpu);% 用训练图像对网络进行训练
netTransfer trainNetwork(aug_img_ds_train,LayerGraph,options);%% 步骤6进行测试并查看结果% 对训练好的网络采用验证数据集进行验证
[YPred,scores] classify(netTransfer,aug_img_ds_test);% 随机显示验证效果
idx randperm(numel(img_ds_Test.Files),4);
figure
for i 1:4subplot(2,2,i)I readimage(img_ds_Test,idx(i));imshow(I)label YPred(idx(i));title(string(label));
end%% 计算分类准确率
YValidation img_ds_Test.Labels;
accuracy mean(YPred YValidation);%% 创建并显示混淆矩阵
figure
confusionchart(YValidation,YPred)
实现效果如下