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


Posted in Python onJune 17, 2020

遇到的问题

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

以上这篇解决Alexnet训练模型在每个epoch中准确率和loss都会一升一降问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python脚本设置系统时间的两种方法
Feb 21 Python
详解Python中表达式i += x与i = i + x是否等价
Feb 08 Python
python决策树之CART分类回归树详解
Dec 20 Python
python爬取拉勾网职位数据的方法
Jan 24 Python
使用python画个小猪佩奇的示例代码
Jun 06 Python
基于数据归一化以及Python实现方式
Jul 11 Python
python3对接mysql数据库实例详解
Apr 30 Python
python爬虫 模拟登录人人网过程解析
Jul 31 Python
python requests库爬取豆瓣电视剧数据并保存到本地详解
Aug 10 Python
python实现文件批量编码转换及注意事项
Oct 14 Python
Django项目创建及管理实现流程详解
Oct 13 Python
pytorch下的unsqueeze和squeeze的用法说明
Feb 06 Python
Java如何基于wsimport调用wcf接口
Jun 17 #Python
使用keras内置的模型进行图片预测实例
Jun 17 #Python
Python虚拟环境库virtualenvwrapper安装及使用
Jun 17 #Python
基于TensorFlow的CNN实现Mnist手写数字识别
Jun 17 #Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 #Python
基于Tensorflow的MNIST手写数字识别分类
Jun 17 #Python
Kears 使用:通过回调函数保存最佳准确率下的模型操作
Jun 17 #Python
You might like
用PHP连接Oracle for NT 远程数据库
2006/10/09 PHP
js和php邮箱地址验证的实现方法
2014/01/09 PHP
php上传功能集后缀名判断和随机命名(强力推荐)
2015/09/10 PHP
PHP+jQuery+Ajax实现分页效果 jPaginate插件的应用
2015/10/09 PHP
php readfile()修改文件上传大小设置
2017/08/11 PHP
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
jQuery 设置 CSS 属性示例介绍
2014/01/16 Javascript
js确认删除对话框效果的示例代码
2014/02/20 Javascript
仿淘宝TAB切换搜索框搜索切换的相关内容
2014/09/21 Javascript
php常见的页面跳转方法汇总
2015/04/15 Javascript
XML文件转化成NSData对象的方法
2015/08/12 Javascript
JavaScript必知必会(十) call apply bind的用法说明
2016/06/08 Javascript
浅谈Node.js:fs文件系统模块
2016/12/08 Javascript
详解vuejs之v-for列表渲染
2017/06/22 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
微信小程序表单验证插件WxValidate的二次封装功能(终极版)
2019/09/03 Javascript
在vue中利用v-html按分号将文本换行的例子
2019/11/14 Javascript
python分割列表(list)的方法示例
2017/05/07 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python查看数据类型的方法
2019/10/12 Python
Pandas读取csv时如何设置列名
2020/06/02 Python
高考考python编程是真的吗
2020/07/20 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
盛大二次面试题
2016/11/18 面试题
优秀女职工事迹材料
2014/02/06 职场文书
法院授权委托书格式
2014/09/28 职场文书
护士节慰问信
2015/02/15 职场文书
给病人的慰问信
2015/03/23 职场文书
义诊活动通知
2015/04/24 职场文书
2016五一劳动节慰问信
2015/11/30 职场文书
在js中修改html body的样式
2021/11/11 Javascript
sqlserver连接错误之SQL评估期已过的问题解决
2022/03/23 SQL Server
win10更新失败无限重启解决方法
2022/04/19 数码科技
MySQL分布式恢复进阶
2022/07/23 MySQL