视频地址:
https://share.weiyun.com/14885e04050da9f53f7670532acb782c
http://pan.baidu.com/s/1skDzV5N
http://cloud.video.taobao.com/play/u/144304055/p/1/e/6/t/1/50010974167.mp4
ppt地址:
http://www.zifuture.com/fs/10.tutorial/2.jibenjieshao.pptx
大纲总览
深度学习下的验证码识别教程 点我查看
1.深度学习
深度学习Deep Learning,简称DL,又称DNN,即深度神经网络Deep Natural Networks。 在此之前有BP神经网络,即Back Propgation,反向传播神经网络。 通常我们会认为,BP或者其他隐层少的网络属于浅层神经网络,而隐层很多的网络称之为DNN,这里的多是没有具体定义的,如图所示即是。
而DNN又是个比较宽泛的词,DNN里面又包括有CNN卷积神经网络、RNN循环神经网络、LSTM长短期记忆网络、GANs对抗网络等几大类型,本文我们默认DL指CNN即可,相关意义可以查询百度。
浅层神经网络
深层神经网络
CNN
2.GPU GPU:图形处理单元,即显卡。以前GPU多为了加速显示帧率等,最近被用在超级计算上,以支持大量密集运算的需求,比如DL的训练过程就是。而显卡又分为三类,即Intel出的集成显卡、AMD系列、NVIDIA系列,被简称集显、A卡、N卡对于DL的GPU支持,必须是N卡,而且还要能够支持CUDA,因为旧版的显卡是不能支持CUDA的,可以下载GPU-Z查看型号和支持情况
显存:显卡的内存,由于DL的计算同时也需要消耗很大的显存空间,所以这个指标也影响着DL的训练和使用。GPU-Z里面查看的Memory Size即是显存大小,而Sensors里面的GPU Load是显卡使用率
对于使用CPU训练,会特别慢,使用GPU训练一般会比CPU快10-30倍甚至更多,所以使用GPU训练是很必要的事情。但是目前很长时间内,GPU的训练一直都是困扰很多人的问题,因为坑太多了,这里我们就详细讲讲关于GPU的那点事~
CUDA:NVIDIA出的一个GPU加速开发工具包,用来做GPU加速开发的支持,CUDA有版本的区分,所以CC库的编译和使用也就依赖着编译时候的版本,目前CC库提供有CUDA8.0、CUDA7.5的编译版本,那么对于使用GPU的你而言必须下载安装对应的CUDA版本和对应的CC版本才行。记得安装完CUDA后,在环境变量里面加入CUDA的目录,否则会提示找不到dll。
CUDA下载地址:
CUDA是不支持Win32的,也就是说,CC框架也不能支持Win32下的GPU相关操作
3.Protocol buffer 称为protobuf,简称PB,是由google开发的一套数据交互的协议栈库,他是一个库,也提供一种协议语法,语法结构跟JSON很相似。你可以使用任何语言解析编码为protobuf格式的协议数据或者文件,我们后期训练使用的模型和网络定义,全部是以protobuf的格式存储的。
协议约定文件
协议数据文件
caffe主要采用google protobuf格式描述网络配置文件,定义DL的各个层参数、训练时候的超参数和二进制的模型权重,所以caffe的训练是不需要写任何代码来实现的,只有调用caffe模型实现任务的时候需要写代码,主要完成训练任务的是caffe.exe程序
相关资料: http://blog.csdn.net/menuconfig/article/details/12837173
4.LMDB lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。其主要特性有: 在CC中,lmdb是为了加速训练的需要,所以把图片文件通过convert_imageset.exe程序存放到一个lmdb数据库中,然后caffe.exe则读取该lmdb的数据作为训练数据,lmdb一般是在一个文件夹里面,有data.mdb和lock.mdb,如下图:
5.数据集 这里我们指训练时候指定的数据集,有train数据集、val数据集、test数据集 通常我们会把train和val数据集制作为lmdb数据库,即: 而test数据集,我们只需要保持label-test.txt就好了
这三个数据集的意义是: train:用来训练的数据集,推荐占全部样本比重95% val:用来训练时候做验证的数据集,推荐占全部样本比重4% test:用来自己写代码测试训练结果模型的数据集,推荐占比1%
这三个数据集是完全不重叠的,就是说,他们之间是没有重复的图片文件。
6.LOSS 损失、误差 神经网络的训练,是通过正向传播求loss,然后回传loss调整权重完成的。loss就是当前训练进展的主要指标,当loss足够小的时候,表示网络基本训练完成。至于多小,取决于当前任务,一般是0.01以下
7.学习率 lr learningrate,学习率 神经网络的训练,是通过正向传播求loss,然后回传loss调整权重完成的。这时候调整权重是根据loss计算然后乘以学习率,就是最终的调整量,所以学习率是控制调整强度的值,也是学习力度的控制,一般我们会给0.01、0.001等值去训练。学习率控制不好,会导致训练过程失败(即loss不下降或者精度不能达标)
8.过拟合、欠拟合 欠拟合 完美 过拟合
欠拟合:学习的还不够,表达能力不够好 过拟合:学习过头了,等于把样本全背下来记下来了,而没有学习应该学的知识,对新样本而言,泛化能力不好。泛化能力即扩展能力,在新样本上表现的效果的能力 中间这个:就是我们想要的数据表达模型被正确学习到的时候,这时候模型泛化能力最好,效果最好
9.迭代 指数据传入网络后进行一次前向运算的过程,称为一次迭代
10.Batch 批次 训练时候,通常会一次一批样本去训练他,综合起来调整loss。这时候迭代一次是用了一批图片
11.数据集转换
12.训练
13.迁移学习 finetune 又叫模型微调,利用已经训练好的模型,初始化一个新的训练任务。就是说,新任务根据这个旧模型开始学习,这样的学习就有一个很好的起点,就会很快得到好的结果。比如我们会在大数据集上训练一个模型(ImageNet数据集),然后新的小任务数据集上识别的时候,基于该模型去训练,将会很容易得到好的效果。若不这么做,我们新的训练任务通常需要非常大量的样本才能得到好效果。所以这个技术非常有用和关键。称做微调,是因为做迁移学习的时候学习率会比从头训练的学习率要低,表示根据已有模型以低的学习率来微调模型权重,训练新的任务。形象的说,一个模型因为见过很复杂的数据,那么他能够通过微微的调整来适应小的新数据,而且做到很好的效果。
主要的就是--weights这个参数指定的模型
14.暂停恢复 resume 训练过程允许中断然后调整参数,然后使用保存的快照继续训练,就是所谓的resume 主要是--snapshot参数指定的solverstate快照实现继续训练
15.使用模型
|