解决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调用shell的方法
Nov 20 Python
整理Python中的赋值运算符
May 13 Python
Python实现爬取需要登录的网站完整示例
Aug 19 Python
Python 创建空的list,以及append用法讲解
May 04 Python
Python使用gRPC传输协议教程
Oct 16 Python
python 自定义异常和异常捕捉的方法
Oct 18 Python
python for循环输入一个矩阵的实例
Nov 14 Python
在OpenCV里使用Camshift算法的实现
Nov 22 Python
python实现飞机大战项目
Mar 11 Python
Python利用Xpath选择器爬取京东网商品信息
Jun 01 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
python 基于selectors库实现文件上传与下载
Dec 31 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数据库(5)
2006/10/09 PHP
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
php中将数组转成字符串并保存到数据库中的函数代码
2013/09/29 PHP
Mootools 1.2教程 设置和获取样式表属性
2009/09/15 Javascript
Javascript实现快速排序(Quicksort)的算法详解
2015/09/06 Javascript
WordPress中利用AJAX异步获取评论用户头像的方法
2016/01/08 Javascript
利用JS实现数字增长
2016/07/28 Javascript
解析AngularJS中get请求URL出现的跨域问题
2016/12/01 Javascript
利用node.js写一个爬取知乎妹纸图的小爬虫
2017/05/03 Javascript
jQuery Masonry瀑布流布局神器使用详解
2017/05/25 jQuery
Bootstrap开发中Tab标签页切换图表显示问题的解决方法
2018/07/13 Javascript
nodejs中express入门和基础知识点学习
2018/09/13 NodeJs
解决微信小程序中转换时间格式IOS不兼容的问题
2019/02/15 Javascript
js数据类型转换与流程控制操作实例分析
2019/12/18 Javascript
如何使用JavaScript实现无缝滚动自动播放轮播图效果
2020/08/20 Javascript
[01:12]DOTA2次级职业联赛 - Newbee.Y 战队宣传片
2014/12/01 DOTA
Python中的迭代器漫谈
2015/02/03 Python
详解python脚本自动生成需要文件实例代码
2017/02/04 Python
CentOS中升级Python版本的方法详解
2017/07/10 Python
win10下python3.5.2和tensorflow安装环境搭建教程
2018/09/19 Python
深入学习python多线程与GIL
2019/08/26 Python
flask 实现上传图片并缩放作为头像的例子
2020/01/09 Python
Python对称的二叉树多种思路实现方法
2020/02/28 Python
Python 中由 yield 实现异步操作
2020/05/04 Python
用CSS3实现无限循环的无缝滚动的实例代码
2017/07/04 HTML / CSS
HTML5实现锚点时请使用id取代name
2013/09/06 HTML / CSS
美国时装品牌:Nautica(诺帝卡)
2016/08/28 全球购物
Sunglasses Shop瑞典:欧洲领先的太阳镜网上商店
2018/04/22 全球购物
安全教育感言
2014/03/04 职场文书
公司请假条格式
2014/04/11 职场文书
保证书格式范文
2014/04/28 职场文书
会计求职信范文
2014/05/24 职场文书
体育系毕业生自荐信
2014/06/28 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
Golang原生rpc(rpc服务端源码解读)
2022/04/07 Golang
以MySQL5.7为例了解一下执行计划
2022/04/13 MySQL