解决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中for循环详解
Jan 17 Python
Python socket.error: [Errno 98] Address already in use的原因和解决方法
Aug 25 Python
python通过线程实现定时器timer的方法
Mar 16 Python
Python基于PycURL自动处理cookie的方法
Jul 25 Python
Python中is与==判断的区别
Mar 28 Python
Python 用Redis简单实现分布式爬虫的方法
Nov 23 Python
浅谈Scrapy网络爬虫框架的工作原理和数据采集
Feb 07 Python
Python学习笔记之lambda表达式用法详解
Aug 08 Python
Python实现语音识别和语音合成功能
Sep 20 Python
Python实现二叉树的最小深度的两种方法
Sep 30 Python
关于多种方式完美解决Python pip命令下载第三方库的问题
Dec 21 Python
Python制作动态字符画的源码
Aug 04 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中使用临时表查询数据的一个例子
2013/02/03 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
PHP中filter函数校验数据的方法详解
2015/07/31 PHP
javascript 播放器 控制
2007/01/22 Javascript
JavaScript入门教程(6) Window窗口对象
2009/01/31 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
JavaScript中具名函数的多种调用方式总结
2014/11/08 Javascript
简介JavaScript中用于处理正切的Math.tan()方法
2015/06/15 Javascript
javascript 动态脚本添加的简单方法
2016/10/11 Javascript
使用Ajax生成的Excel文件并下载的实例
2016/11/21 Javascript
用JS编写一个函数,返回数组中重复出现过的元素(实例)
2017/09/14 Javascript
js数组常用最重要的方法
2018/02/04 Javascript
简单易扩展可控性强的Jquery转盘抽奖程序
2019/03/16 jQuery
Vue组件之高德地图地址选择功能的实例代码
2019/06/21 Javascript
JS实现点餐自动选择框(案例分析)
2019/12/10 Javascript
vue+element UI实现树形表格
2020/12/29 Vue.js
关于uniApp editor微信滑动问题
2021/01/15 Javascript
python发腾讯微博代码分享
2014/01/10 Python
python多线程编程中的join函数使用心得
2014/09/02 Python
Python切片用法实例教程
2014/09/08 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
Python KMeans聚类问题分析
2018/02/23 Python
解决python ogr shp字段写入中文乱码的问题
2018/12/31 Python
Python实现将字符串的首字母变为大写,其余都变为小写的方法
2019/06/11 Python
python 含子图的gif生成时内存溢出的方法
2019/07/07 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
python3 googletrans超时报错问题及翻译工具优化方案 附源码
2020/12/23 Python
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
机械专业应届生求职信
2013/09/21 职场文书
医学护理毕业生自荐信
2013/11/07 职场文书
企业业务员岗位职责
2014/03/14 职场文书
HR必备:超全面的薪酬待遇管理方案!
2019/07/12 职场文书
SQL Server2019数据库之简单子查询的具有方法
2021/04/27 SQL Server
python中opencv实现图片文本倾斜校正
2021/06/11 Python
Shell脚本一键安装Nginx服务自定义Nginx版本
2022/03/20 Servers