解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题

作者:菜田的守望者 时间:2022-12-06 16:17:37 

遇到的问题

解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题

当时自己在使用Alexnet训练图像分类问题时,会出现损失在一个epoch中增加,换做下一个epoch时loss会骤然降低,一开始这个问题没有一点头绪,我数据也打乱了,使用的是tf.train.shuffle_batch

在capacity中设置一个值,比如是1000吧,每次取一千个数据后将这一千个数据打乱,本次使用的数据集就是每个种类1000多,而我加载数据时是一类一类加载的,这就造成了每一批次的开始可以跟前一类数据做打乱处理,但是在中间数据并不能达到充分的shuffle

解决问题

在加载数据集的时候用numpy中的shuffle将数据集充分的打乱后在读入tfrecord中,之后读取的时候使用tf.tain.shuffle_batch和使用tf.train.batch就没有区别了。另外capacity这个数值不益设置过大,会对自己的电脑造成压力。

补充知识:MATLAB中使用AlexNet、VGG、GoogLeNet进行迁移学习

直接贴代码,具体用法见注释:


clc;clear;

net = alexnet; %加载在ImageNet上预训练的网络模型
imageInputSize = [227 227 3];
%加载图像
allImages = imageDatastore('.\data227Alexnet',...
'IncludeSubfolders',true,...
'LabelSource','foldernames');
%划分训练集和验证集
[training_set,validation_set] = splitEachLabel(allImages,0.7,'randomized');
%由于原始网络全连接层1000个输出,显然不适用于我们的分类任务,因此在这里替换
layersTransfer = net.Layers(1:end-3);
categories(training_set.Labels)
numClasses = numel(categories(training_set.Labels));
%新的网络
layers = [
layersTransfer
fullyConnectedLayer(numClasses,'Name', 'fc','WeightLearnRateFactor',1,'BiasLearnRateFactor',1)
softmaxLayer('Name', 'softmax')
classificationLayer('Name', 'classOutput')];

lgraph = layerGraph(layers);
plot(lgraph)
%对数据集进行扩增
augmented_training_set = augmentedImageSource(imageInputSize,training_set);

opts = trainingOptions('adam', ...
'MiniBatchSize', 32,... % mini batch size, limited by GPU RAM, default 100 on Titan, 500 on P6000
'InitialLearnRate', 1e-4,... % fixed learning rate
'LearnRateSchedule','piecewise',...
'LearnRateDropFactor',0.25,...
'LearnRateDropPeriod',10,...
'L2Regularization', 1e-4,... constraint
'MaxEpochs',20,..
'ExecutionEnvironment', 'gpu',...
'ValidationData', validation_set,...
'ValidationFrequency',80,...
'ValidationPatience',8,...
'Plots', 'training-progress')

net = trainNetwork(augmented_training_set, lgraph, opts);

save Alex_Public_32.mat net

[predLabels,predScores] = classify(net, validation_set);
plotconfusion(validation_set.Labels, predLabels)
PerItemAccuracy = mean(predLabels == validation_set.Labels);
title(['overall per image accuracy ',num2str(round(100*PerItemAccuracy)),'%'])

MATLAB中训练神经网络一个非常大的优势就是训练过程中各项指标的可视化,并且最终也会生成一个混淆矩阵显示验证集的结果。

来源:https://blog.csdn.net/weixin_43492016/article/details/102751007

标签:Alexnet,epoch,准确率,loss
0
投稿

猜你喜欢

  • SQL Server上进行表设计时表的主键设计问题

    2010-06-24 16:10:00
  • asp自动采集程序

    2009-02-04 10:11:00
  • TensorFlow加载模型时出错的解决方式

    2023-12-23 05:49:04
  • getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现

    2024-04-22 13:01:07
  • 对pandas中iloc,loc取数据差别及按条件取值的方法详解

    2021-06-15 01:58:05
  • phpmyadmin中禁止外网使用的方法

    2023-09-12 01:10:22
  • python中子类继承父类的__init__方法实例

    2022-05-27 19:37:21
  • python小技巧之批量抓取美女图片

    2022-09-16 17:25:58
  • 利用matplotlib实现根据实时数据动态更新图形

    2023-07-17 18:50:45
  • 通过数据库引擎来加速的MySQL数据库

    2012-01-29 18:07:09
  • Python 虚拟环境venv详解

    2021-04-12 03:44:14
  • SQL性能优化之定位网络性能问题的方法(DEMO)

    2024-01-13 20:42:17
  • Python语音识别API实现文字转语音的几种方法

    2023-02-17 01:17:00
  • python实现查找excel里某一列重复数据并且剔除后打印的方法

    2021-01-23 10:27:45
  • MySQL转义字符的实际应用

    2010-08-31 14:55:00
  • Win 10下Anaconda虚拟环境的教程

    2022-09-18 16:42:06
  • python中requests模拟登录的三种方式(携带cookie/session进行请求网站)

    2021-11-29 10:44:29
  • 解决sql server保存对象字符串转换成uniqueidentifier失败的问题

    2024-01-20 01:22:59
  • Bootstrap编写一个兼容主流浏览器的受众巨幕式风格页面

    2024-05-02 17:31:43
  • Java Spring动态生成Mysql存储过程详解

    2024-01-25 10:16:32
  • asp之家 网络编程 m.aspxhome.com