神经网络的调试,比一般的程序调试难度大得多。和编译错误以及运行时程序崩溃相比,神经网络比较棘手的地方,往往在于程序运行正常,但是结果无法收敛,这个检查起来可要费时费力。

下面是神经网络比较通用的调试技巧:

1、深度学习的问题解决

在前期开发中,我们会同时遇到多个问题,就像前面提到的,深度学习训练由数百万次迭代组成,找到bug非常困难,且容易崩溃。所以,从简单测试开始,渐渐做一些改变。

以功能优先的方式检查模型:

把正则化因子设置为0,不要其他的正则化,然后使用默认设置的Adam优化器和ReLU。不要将数据增强,使用更少的深度网络层,扩大输入数据,不要使用非必要的预处理,也不要长时间训练迭代训练。

用小量的训练数据使模型过拟合是深度学习的最好方式,如果在数千次迭代内,损失值不下降,进一步调试代码。

然后对模型做后续的修改:增加网络层和自定义,开始用完整训练数据做训练。再通过监控训练和验证数据集之间的准确率差别,来增加正则化控制过拟合。如果卡住了,去掉所有东西,从更小的问题开始上手。

2、初始化超参数

使用Adam优化器,具有速度快、高效且缺省学习率也很好等优点。如果损失值还没下降,就调整学习率。如果损失值降的太慢,增加学习率。如果损失值上升或者梯度爆炸,降低学习率。重复这个过程,直到损失值逐渐下降。

3、检查列表

数据:

可视化并检查输入的数据,然后检查输入标签的准确率,适当的缩放输入数据,并检查输出的范围大小,使用训练集的平均值/方差来重新调节测试集,获取数据集的整体质量。

模型:

模型参数准确的初始化,权重不要全部设定为0,对激活或者梯度消失/爆炸的网络层做 debug。对权重大部分是0或者权重太大的网络层做debug,检查并测试损失函数。对预训练模型,输入数据范围要匹配模型中使用的范围。

4、权重初始化

把权重全部初始化到0是最常见的错误,深度网络也学不到任何东西。权重要按照高斯分布做初始化。

5、缩放与归一化

如果输入特征和节点输出都被归一化,就能更容易地训练模型。如果模型做的不准确,损失值就不会随着学习率降低。要适当的缩放输入,而对节点的输出,完美的形状是零均值,且值不太大(正或负)。如果不是且遇到该层有梯度问题,则在卷积层做批归一化,在RNN单元上做层归一化。

6、损失函数

检查和测试损失函数的准确性,模型的损失值一定要比随机猜测的值低。

7、分析误差

检查表现不好的地方并加以改进,且对误差进行可视化。例如,增加更多带有更小滤波器的卷积层来解开小特征。如果有必要就增强数据或者收集更多类似的样本来更好的训练模型。

8、正则化精调

关掉正则化直到做出合理的预测。我们需要增加训练数据的体量,增加正则化来缩小训练和验证准确率之间的差别。密切监测数据和正则化成本,长时间尺度下,正则化损失不应该控制数据损失。

9、多个损失函数

在第一次实现中,避免使用多个数据损失函数。每个损失函数的权重可能有不同的数量级,也需要去调整。如果只有一个损失函数,就可以只在意学习率了。

10、固定变量

使用预训练模型,我们可以固定特定层的模型参数,从而加速计算。一定要再次检查是否有变量固定的错误。

11、单元测试

应对核心模块进行单元测试,以便于代码改变时实现依旧稳健。如果其参数用随机发生器做初始化,可以模仿输入数据、检查输出,检查一个网络层的输出。

12、维度误匹配

要一直跟踪Tensor(矩阵)的形状,并将其归档到代码中。对形状是[N, channel, W, H]的Tensor,如果 W(宽)和 H(高)有同样的维度,二者交换代码不会出错。

卷积网络如何让测试集准确率上升_调试深度学习网络相关推荐

  1. 测试集准确率不变_这个医疗AI准确率突破天际,招来了铺天盖地的质疑

    转自 | 量子位 只要输入一次心跳的波谱.就能判断一个人有没有发生心力衰竭 (CHF) ,准确率100%.这是英国华威大学领衔的团队,用机器学习方法做出的新成果.还登上了影响因子2.943的Biome ...

  2. 网络nan的原因_训练深度学习网络时候,出现Nan是什么原因,怎么才能避免?

    在训练深度神经网络的时候,出现NaN比较大的可能是因为学习速率过大,梯度值过大,产生梯度爆炸. During experimentation, once the gradient value grow ...

  3. 【深度学习】Pytorch实现CIFAR10图像分类任务测试集准确率达95%

    文章目录 前言 CIFAR10简介 Backbone选择 训练+测试 训练环境及超参设置 完整代码 部分测试结果 完整工程文件 Reference 前言 分享一下本人去年入门深度学习时,在CIFAR1 ...

  4. pytorch实现图像分类,训练集准确率很高,测试集准确率总是很低

    在使用pytorch运行图像分类的代码的时候,发现测试集准确率总是只有30%左右, 但是训练集准确率基本可以达到80%以上,那么存在的问题可能是一下几个方面导致的: 1.学习率设置得太高,可以尽量将学 ...

  5. keras训练模型,训练集的准确率很高,但是测试集准确率很低的原因

    今天在测试模型时发现一个问题,keras训练模型,训练集准确率很高,测试集准确率很低,因此记录一下希望能帮助大家也避坑: 首先keras本身不同的版本都有些不同的或大或小的bug,包括之前也困扰过我的 ...

  6. caffe验证集测试集准确率差别很大的可能原因

    用caffe自身的训练方法训练的时候,在验证集上准确率达到99%,可是当我用python接口跑测试数据只有50%左右,我起初以为是过拟合,可看了数据发现分类全部偏向一个类别,几乎所有图片,全部分为印刷 ...

  7. MIT探索深度学习网络的基础理论

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 仅作学术分享,不代表本公众号立场,侵权联系删除 转载于:机器之心 AI博士笔记系列推荐 周志华<机器学习> ...

  8. 搭建深度学习网络识别图片--猫狗大战

    猫狗大战(项目代码:https://github.com/JasonZhou89/kaggle--Dogs-vs.-Cats-Redux-Kernels-Edition) 一. 问题的定义 1.1 项 ...

  9. 面向弹载图像的深度学习网络压缩方法研究

    这里写自定义目录标题 源自:航空兵器 作者:高一博 杨传栋 陈栋 凌冲 摘 要 针对基于深度学习目标识别算法具有网络结构复杂.参数量大.计算延迟高等特点,难以直接应用于弹载任务的问题,对网络轻量化方法 ...

  10. (六)使用ResNet50迁移学习进行COVID-19诊断:从头开始构建深度学习网络

    目录 安装库并加载数据集 预处理数据 构建深度学习网络 训练网络 评估网络 下一步? 下载源 - 300.4 KB 在本系列文章中,我们将应用深度学习网络ResNet50来诊断胸部X射线图像中的Cov ...

最新文章

  1. Python通过代理ip访问网站
  2. JavaScript进阶5-学习笔记
  3. 防火墙firewalld
  4. php ueditor 去掉在线管理,UEditor 添加在线管理图片删除功能 (转载)
  5. python is 与 == 的区别
  6. OpenStack - 学习经验总结
  7. Orthanc+OHIF DICOM Viewer最佳Dicom解析、在线浏览实践指南(解决方案)
  8. Hosts文件与域名解析
  9. 路由器刷机教程图解_小米路由器刷机教程
  10. 智慧校园信息化建设方案
  11. 基于Java平台实现发送短信功能
  12. 一文讲透计算机网络的数据链路层
  13. Job for tomcat.service failed because the control process exited with error code 解决办法:
  14. 228句最常用英文口语短句(转)
  15. 郑州大学计算机系1996级校友,公共管理学院成功举办96级公共关系专业学生毕业20周年返校活动...
  16. 使用python实现微信小程序自动签到2.0
  17. 小白学 Python 爬虫(11):urllib 基础使用(一)
  18. MySQL数据库设计作业 ——《网上书店系统》数据库设计实验报告
  19. 郭敬明道歉承认作品抄袭:如何维护互联网作品版权信息
  20. 百度近年来主要算法2017

热门文章

  1. Java的GUI学习
  2. mybatis mysql xml配置_Mybatis-Spring连接mysql 8.0配置步骤出错的解决方法
  3. oracle语句_ORACLE 常用语句实例:CTE MERGE 结合
  4. Linux——常用文件管理命令(必会)
  5. 乘法逆元(ex_gcd和同余定理)
  6. 30天自制操作系统光盘_8-bit Windows 八位机视窗操作系统(四):科王/邦谷Wins98...
  7. 宝塔界面,添加数据库,数据库管理密码错误!
  8. c语言四个零,输入任意四个整数(0到10),运算符只有加减乘除,还有括号.每个数只能且必须用一次。要求判断这些表达的结果中是否有24。如果有,输出计算表达式:如输入4,6,1...
  9. 指数加权移动平均模型_常见收益模型
  10. 软件开发中 前台、中台、后台英文_中台为什么这么火?