1. 学习率衰减

这是之前在实习的时候进行的图像处理课题提供的思路。
学习率衰减策略可以实现两个目的:在训练初期较高的学习率使得网络模型更快的梯度下降,训练后期较小的学习率使得算法更容易收敛到最优值。

1.1 自定义指数衰减算法

DecayedLearningRate=LearningRate∗DecayRateGlobalStep/DacayStepsDecayedLearningRate = LearningRate*DecayRate^{GlobalStep/DacaySteps} DecayedLearningRate=LearningRate∗DecayRateGlobalStep/DacaySteps

其中,
LearningRate是设定的初始学习率;
DecayRate是衰减比率,一般略小于1.0;
DacaySteps是衰减学习率的间隔次数;
GlobalStep是当前的迭代次数;

另外在算法中引入了warm up 机制。

Warm up 预热
在初始warm_up_step训练中保持一个较大的学习率,以便模型尽快适应数据,当模型趋于稳定之后在按照设定的学习率进行训练:
当step<warm_up_step时,lr = 0.1lr + (lr-0.1lr)(step/warm_up_step) ,
当step>warm_up_step时,lr = decayed_learning_rate 。

def self_adjust_learning_rate(optimizer, train_sum):optimizer.step()warm_up_step = int(EPOCHS * warm_up)if train_sum < warm_up_step:lr = 0.1 * LR + (LR - 0.1 * LR) / warm_up_step * train_sumelse:lr = LR * (decay_rate ** ((train_sum - warm_up_step) // decay_steps))for param_group in optimizer.param_groups:param_group["lr"] = lrreturn lrlr = self_adjust_learning_rate(optimizer, epoch)   # 自定义学习率衰减算法

使用学习率衰减算法后:

BATCH_SIZE = 64 # 定义超参数,每次处理64张图片
DEVICE = torch.device(“cuda” if torch.cuda.is_available() else “cpu”) # 检测电脑上是否有GPU,如果有就使用GPU,如果没有就使用cpu
EPOCHS = 300 # 将数据集训练100轮
LR = 0.001 # 学习率
TRAIN_DIVISION = 3 # 训练集划分占比
warm_up = 5
decay_rate = 0.95
decay_steps = 20



这个结果0.9789是在IITD数据集上得到的,大于之前得到的最好结果 0.951316。

1.2 指数衰减函数

torch.optim.lr_scheduler中提供等间隔调整(Step)、多间隔调整(MultiStep)、指数衰减(Exponential)、余弦退火(CosineAnnealing)、自适应调整(ReduceLROnPlateau)、自定义调整(LambdaLR)等函数实现学习率的调整,参考这篇:Pytorch:学习率衰减及其用法

为了比较,选用了指数衰减函数:

def scheduler_adjust_learning_rate(optimizer, scheduler, train_sum):warm_up_step = int(EPOCHS * warm_up)if train_sum < warm_up_step:optimizer.step()lr = 0.1 * LR + (LR - 0.1 * LR) / warm_up_step * train_sumfor param_group in optimizer.param_groups:param_group["lr"] = lrelse:scheduler.step()lr = scheduler.get_lr()[0]return lrscheduler = lr_scheduler.ExponentialLR(optimizer, gamma=decay_rate)
lr = scheduler_adjust_learning_rate(optimizer, scheduler, epoch)   # 学习率衰减

但结果并不理想,也可能是我使用的方式不正确。

2打乱数据集

在划分数据集时随机划分,并改变比例:

for i, path in enumerate(PATH):data_index = os.listdir(path)data_size = len(data_index)train_size = int(data_size * TRAIN_DIVISION)train_index = random.sample(data_index, train_size)test_index = list(set(data_index) - set(train_index))
TRAIN_DIVISION RR
0.7 0.9565217391304348
0.8 0.9616122840690979
0.9 0.9846743295019157

似乎训练集占比在0.9的时候识别率最高,但考虑到IITD只有2601幅图片用于训练和测试,有可能是因为用于测试的图片较少,所以识别率相对较高。所以或许可以考虑使用数据增强扩充可供训练的数据。

3.完善代码和流程

将训练结果和相关信息输出到日志中保存,以便再次使用数据和进行对比。
保存每次训练的最优模型,在训练结束后加载模型测试随机选出的掌纹图片,记录测试单张图片的时间。

CNN非接触掌纹识别改进过程(二)相关推荐

  1. CNN非接触掌纹识别改进过程(三)——Gabor卷积神经网络

    参考论文: Gabor Convolutional Networks (IEEE Transactions on Image Processing(Volume: 27,Issue: 9, Sept. ...

  2. CNN进行非接触掌纹识别的改进过程

    1.模型和参数不变 模型:2个卷积层+1个全连接层 参数: BATCH_SIZE = 32 # 定义超参数,每次处理32张图片 EPOCHS = 20 # 将数据集训练20轮 LR = 0.01 # ...

  3. 通过联邦哈希学习实现隐私掌纹识别

    文章目录 摘要 一.介绍 二.提出的方法 1 2 总结 摘要 目前,基于深度学习的掌纹识别方法已经取得了很大的成功.然而,在实际应用中更重要的是隐私问题,他们主要关注的是准确性而忽略了隐私问题.在这封 ...

  4. 2021WSB-day1-2-Ajay Kumar介绍Less Constrained下的非接触性掌纹识别

    智能手机的广泛使用,电子商务的普及以及由于COVID19而引起的对卫生问题的日益关注,越来越吸引研究人员为非接触式掌纹识别设计更准确,更可靠的算法. 在本次课程中,我们将讨论非接触式掌纹识别的更准确, ...

  5. 【论文解读】经典CNN对2D3D掌纹及掌静脉识别的性能评估

    掌纹识别(palmprint recognition)及掌静脉识别(palm vein recognition)作为两种新兴的生物特征识别技术已经引起广泛关注.最近几年,深度学习已经成为人工智能领域最 ...

  6. 为什么要做掌纹识别?

    前几天听了学校的一场博士论文答辩,其中一个师兄是用GAN网络做多模态掌纹建模,老师提问的时候就问到了为什么要做掌纹识别,毕竟像现在的指纹识别,虹膜识别已经比较成熟了.其实自己一直也对这个问题比较好奇, ...

  7. 【专利转让】掌纹识别、图像复原、人脸检测定位相关领域

    52CV一粉丝现有一些专利想要转让,掌纹识别.图像复原.人脸检测定位相关领域,具体名称以及截图如下: 1.一种稳定特征图像下交叉梯度编码的掌纹识别方法. 专利号:ZL 2013 1 0611988.0 ...

  8. 掌纹识别matlab,matlab掌纹识别思路

    (vid), ''图形识别.jpg'')'); 2.2.2读取图片并调用函数 i = imread('F:\\matlab\\1.jpg'); z=shibie(i); 2.2.3图片处理及图形识别与 ...

  9. 基于深度学习的近红外掌纹识别原型系统设计与实现

    基于深度学习的近红外掌纹识别原型系统设计与实现 一.绪论 二.深度学习知识 三.Tensorflow 四.卷积神经网络 五.掌纹识别理论 掌纹图像采集 掌纹图像预处理 掌纹特征提取 掌纹特征匹配 掌纹 ...

最新文章

  1. 使用commandfield删除、修改gridview
  2. 简单分析算法的时间复杂度
  3. 中职计算机教师个人自我诊改报告,教师自我诊改报告
  4. linux 正则表达式与实践
  5. macpro连接不到索尼耳机WH-1000XM3搜索不到索尼连接
  6. go语言一天入门(上)
  7. psftp 上传下载文件
  8. leetcode题目及答案python_leetcode Python算法题(20)-----多题
  9. kdchxue讲解V9父栏目调用子栏目的办法
  10. caffe 使用笔记
  11. php pdo setfetchmode,PDOStatement::setFetchMode
  12. 前端-js网页特效(三)动画效果及原理
  13. 为什么想来我们公司工作?- 面试常见问题解析
  14. 【Pytorch】解决使用BucketIterator.splits警告volatile was removed and now has no effect. Use `with torch.no_g
  15. 36岁的it一线运维是不是废了_35以上IT人咋活?给你三个真实的案例
  16. excel和mysql的区别是什么_请问数据库和电子表格之间有什么区别
  17. pfx文件解析私钥和公钥
  18. final修饰局部变量
  19. Arduino-ESP8266检测温湿度上传阿里云
  20. 分享个妖精的尾巴辅助脚本,力量觉醒挂机快速升级提升战力

热门文章

  1. 钉钉与钉钉对接集成查询表单列表详情(宜搭)连通发起审批实例(官方)(钉钉【项目事项】未审核完成=>钉钉【工作延误记录表】)
  2. 第十四届全国大学生数学竞赛决赛(非数类)游记+答案解析
  3. NFS和autofs
  4. 寒冰王座(完全背包)
  5. WPF编程--OpenCV人脸识别
  6. 【ISP】CMOS(3)-sensor特性
  7. 为什么需要固码这个三方支付?起源于哪?
  8. djangox学习05--项目需求分析与系统设计
  9. igs snx周解文件格式
  10. IOS开发教程第一季之01UI基础day7合并IOS学习007----控件(UITableView03微博)