解决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编程中对Monkey Patch猴子补丁开发方式的运用
May 27 Python
Python3 Random模块代码详解
Dec 04 Python
python统计多维数组的行数和列数实例
Jun 23 Python
Flask框架实现给视图函数增加装饰器操作示例
Jul 16 Python
详解Python函数式编程—高阶函数
Mar 29 Python
python基于K-means聚类算法的图像分割
Oct 30 Python
python代码实现TSNE降维数据可视化教程
Feb 28 Python
python实现FTP文件传输的方法(服务器端和客户端)
Mar 20 Python
OpenCV 之按位运算举例解析
Jun 19 Python
Django数据统计功能count()的使用
Nov 30 Python
通用的Django注册功能模块实现方法
Feb 05 Python
Python使用cn2an实现中文数字与阿拉伯数字的相互转换
Mar 02 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
超级简单的发送邮件程序
2006/10/09 PHP
php预定义常量
2006/12/25 PHP
PHP 事务处理数据实现代码
2010/05/13 PHP
TP5框架实现上传多张图片的方法分析
2020/03/29 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
最简单的jQuery程序 入门者学习
2009/07/09 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
jQuery滚动条插件nanoscroller使用指南
2015/04/21 Javascript
JS实现可拖曳、可关闭的弹窗效果
2015/09/26 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
简单实现js无缝滚动效果
2017/02/05 Javascript
详解Vue.js Mixins 混入使用
2017/09/15 Javascript
JS伪继承prototype实现方法示例
2018/06/20 Javascript
vue组件从开发到发布的实现步骤
2018/11/11 Javascript
在layui中layer弹出层点击事件无效的解决方法
2019/09/05 Javascript
element-ui 远程搜索组件el-select在项目中组件化的实现代码
2019/12/04 Javascript
三步搞定:Vue.js调用Android原生操作
2020/09/07 Javascript
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
shell命令行,一键创建 python 模板文件脚本方法
2018/03/20 Python
基于Python3.6+splinter实现自动抢火车票
2018/09/25 Python
Django如何防止定时任务并发浅析
2019/05/14 Python
python修改文件内容的3种方法详解
2019/11/15 Python
Python如何实现Paramiko的二次封装
2021/01/30 Python
印尼最大的在线购物网站:MatahariMall.com
2016/08/26 全球购物
法国二手手袋、手表和奢侈珠宝购物网站:Collector Square
2018/07/05 全球购物
澳大利亚儿童鞋在线:The Trybe
2019/07/16 全球购物
请解释接口的显式实现有什么意义
2012/05/26 面试题
毕业生的求职信范文分享
2013/12/04 职场文书
工业设计专业个人求职信范文
2013/12/28 职场文书
电子商务优秀毕业生求职信
2014/07/11 职场文书
中班上学期个人总结
2015/02/12 职场文书
酒店宣传语大全
2015/07/13 职场文书
正确使用MySQL update语句
2021/05/26 MySQL
Python初学者必备的文件读写指南
2021/06/23 Python