解决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对MySQL数据操作
Apr 06 Python
详解Django 中是否使用时区的区别
Jun 14 Python
python3.x 将byte转成字符串的方法
Jul 17 Python
自学python的建议和周期预算
Jan 30 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
Python文本文件的合并操作方法代码实例
Mar 31 Python
Python读取Excel数据并生成图表过程解析
Jun 18 Python
keras model.fit 解决validation_spilt=num 的问题
Jun 19 Python
浅谈TensorFlow之稀疏张量表示
Jun 30 Python
python批量生成条形码的示例
Oct 10 Python
详解java调用python的几种用法(看这篇就够了)
Dec 10 Python
Python人工智能之混合高斯模型运动目标检测详解分析
Nov 07 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排序之二维数组的按照字母排序实现代码
2011/08/13 PHP
PHP的介绍以及优势详细分析
2019/09/05 PHP
PHP调用接口API封装的例子
2019/10/11 PHP
XHTML-Strict 内允许出现的标签
2006/12/11 Javascript
javascript 导出数据到Excel(处理table中的元素)
2009/12/18 Javascript
使用jquery实现图文切换效果另加特效
2013/01/20 Javascript
JS.getTextContent(element,preformatted)使用介绍
2013/09/21 Javascript
jquery动态增加删除表格行的小例子
2013/11/14 Javascript
关于页面嵌入swf覆盖div层的问题的解决方法
2014/02/11 Javascript
JSON.parse()和JSON.stringify()使用介绍
2014/06/20 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
js绘制圆形和矩形的方法
2015/08/05 Javascript
jQuery+PHP+MySQL二级联动下拉菜单实例讲解
2015/10/27 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
利用prop-types第三方库对组件的props中的变量进行类型检测
2017/05/02 Javascript
jQuery实现div跟随鼠标移动
2020/08/20 jQuery
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
vue 父组件给子组件传值子组件给父组件传值的实例代码
2019/04/15 Javascript
Nodejs异步流程框架async的方法
2019/06/07 NodeJs
JavaScript实现随机五位数验证码
2019/09/27 Javascript
小程序表单认证布局及验证详解
2020/06/19 Javascript
Python实现Linux下守护进程的编写方法
2014/08/22 Python
非递归的输出1-N的全排列实例(推荐)
2017/04/11 Python
python 实现对数据集的归一化的方法(0-1之间)
2018/07/17 Python
Python将json文件写入ES数据库的方法
2019/04/10 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
python如何给字典的键对应的值为字典项的字典赋值
2019/07/05 Python
python生成requirements.txt的两种方法
2019/09/18 Python
Python-jenkins模块获取jobs的执行状态操作
2020/05/12 Python
实习教师自我鉴定
2013/12/09 职场文书
安全资料员岗位职责
2013/12/14 职场文书
离婚协议书范本样本
2014/08/19 职场文书
个人向公司借款协议书
2014/10/09 职场文书
聚会通知怎么写
2015/04/23 职场文书
励志正能量20句:送给所有为梦想拼搏的人
2019/11/11 职场文书
java版 简单三子棋游戏
2022/05/04 Java/Android