深度学习相关基本概念

1.深度学习

深度学习Deep Learning,简称DL,又称DNN,即深度神经网络Deep Natural Networks。在此之前有BP神经网络,即Back Propgation,反向传播神经网络。通常我们会认为,BP或者其他隐层少的网络属于浅层神经网络,而隐层很多的网络称之为DNN,这里的多是没有具体定义的。

而DNN又是个比较宽泛的词,DNN里面又包括有CNN卷积神经网络、RNN循环神经网络、LSTM长短期记忆网络、GANs对抗网络等几大类型,本文我们默认DL指CNN即可,相关意义可以查询百度。

shenduxuexi

浅层神经网络

shenduxuexi1

深层神经网络

shenduxuexi2

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下载地址:

CUDA7.5:http://download.pchome.net/development/c/download-194360.html

CUDA8.0:https://developer.nvidia.com/cuda-downloads

CUDA是不支持Win32的,也就是说,CC框架也不能支持Win32下的GPU相关操作

3.Protocol buffer

称为protobuf,简称PB,是由google开发的一套数据交互的协议栈库,他是一个库,也提供一种协议语法,语法结构跟JSON很相似。你可以使用任何语言解析编码为protobuf格式的协议数据或者文件,我们后期训练使用的模型和网络定义,全部是以protobuf的格式存储的。

shenduxuexi3

协议约定文件

shenduxuexi4

协议数据文件

caffe主要采用google protobuf格式描述网络配置文件,定义DL的各个层参数、训练时候的超参数和二进制的模型权重,所以caffe的训练是不需要写任何代码来实现的,只有调用caffe模型实现任务的时候需要写代码,主要完成训练任务的是caffe.exe程序

相关资料:

http://blog.csdn.net/menuconfig/article/details/12837173

4.LMDB

lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。其主要特性有:
瓜拉呱啦~。。。,参考:http://www.jianshu.com/p/yzFf8j在CC中,lmdb是为了加速训练的需要,所以把图片文件通过convert_imageset.exe程序存放到一个lmdb数据库中,然后caffe.exe则读取该lmdb的数据作为训练数据,lmdb一般是在一个文件夹里面,有data.mdb和lock.mdb。

shenduxuexi5

5.数据集

这里我们指训练时候指定的数据集,有train数据集、val数据集、test数据集通常我们会把train和val数据集制作为lmdb数据库,而test数据集,我们只需要保持label-test.txt就好了

shenduxuexi6

这三个数据集的意义是:

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不下降或者精度不能达标)

shenduxuexi7

8.过拟合、欠拟合

shenduxuexi8

欠拟合:学习的还不够,表达能力不够好

过拟合:学习过头了,等于把样本全背下来记下来了,而没有学习应该学的知识,对新样本而言,泛化能力不好。泛化能力即扩展能力,在新样本上表现的效果的能力中间这个:就是我们想要的数据表达模型被正确学习到的时候,这时候模型泛化能力最好,效果最好

9.迭代

指数据传入网络后进行一次前向运算的过程,称为一次迭代

10.Batch

批次

训练时候,通常会一次一批样本去训练他,综合起来调整loss。这时候迭代一次是用了一批图片

11.数据集转换

shenduxuexi9

12.训练

shenduxuexi10

13.迁移学习

finetune

又叫模型微调,利用已经训练好的模型,初始化一个新的训练任务。就是说,新任务根据这个旧模型开始学习,这样的学习就有一个很好的起点,就会很快得到好的结果。比如我们会在大数据集上训练一个模型(ImageNet数据集),然后新的小任务数据集上识别的时候,基于该模型去训练,将会很容易得到好的效果。若不这么做,我们新的训练任务通常需要非常大量的样本才能得到好效果。所以这个技术非常有用和关键。称做微调,是因为做迁移学习的时候学习率会比从头训练的学习率要低,表示根据已有模型以低的学习率来微调模型权重,训练新的任务。形象的说,一个模型因为见过很复杂的数据,那么他能够通过微微的调整来适应小的新数据,而且做到很好的效果。

主要的就是–weights这个参数指定的模型

14.暂停恢复

resume

训练过程允许中断然后调整参数,然后使用保存的快照继续训练,就是所谓的resume主要是–snapshot参数指定的solverstate快照实现继续训练

15.使用模型

shenduxuexi11

1.本文部分内容转载自其它媒体,但并不代表本站赞同其观点和对其真实性负责。
2.若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
3.如果本站有侵犯、不妥之处的资源,请在网站最下方联系我们。将会第一时间解决!
4.本站所有内容均由互联网收集整理、网友上传,仅供大家参考、学习,不存在任何商业目的与商业用途。
5.本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
孤单博客 » 深度学习相关基本概念
  • 22会员总数(位)
  • 286资源总数(个)
  • 1本周发布(个)
  • 0 今日发布(个)
  • 239稳定运行(天)

提供最优质的资源集合

加入海王 加入Q群
开通海王 享更多特权,建议使用 QQ 登录