[TOC]
# 视频地址
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
# 深度学习
深度学习Deep Learning,简称DL,又称DNN,即深度神经网络Deep Natural Networks。
在此之前有BP神经网络,即Back Propgation,反向传播神经网络。
通常我们会认为,BP或者其他隐层少的网络属于浅层神经网络,而隐层很多的网络称之为DNN,这里的多是没有具体定义的,如图所示即是。
而DNN又是个比较宽泛的词,DNN里面又包括有CNN卷积神经网络、RNN循环神经网络、LSTM长短期记忆网络、GANs对抗网络等几大类型,本文我们默认DL指CNN即可,相关意义可以查询百度。
* 浅层神经网络
![](https://box.kancloud.cn/fc630eaf4c7e2b62f15b2e93a862f46b_414x276.png)
* 深层神经网络
![](https://box.kancloud.cn/f9c6630683aac8585c2f3e7823da2afc_658x346.png)
# CNN
![](https://box.kancloud.cn/700718ce5f07cc96fbb4d1abb4f2b655_907x435.png)
# 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相关操作
# Protocol buffer
称为protobuf,简称PB,是由google开发的一套数据交互的协议栈库,他是一个库,也提供一种协议语法,语法结构跟JSON很相似。你可以使用任何语言解析编码为protobuf格式的协议数据或者文件,我们后期训练使用的模型和网络定义,全部是以protobuf的格式存储的。
* 协议约定文件
![](https://box.kancloud.cn/e3365970fda32e0b07515ab4ddf6747b_710x348.png)
* 协议数据文件
![](https://box.kancloud.cn/4780a2cdf5565111c6db750ee500d08a_283x347.png)
caffe主要采用google protobuf格式描述网络配置文件,定义DL的各个层参数、训练时候的超参数和二进制的模型权重,所以caffe的训练是不需要写任何代码来实现的,只有调用caffe模型实现任务的时候需要写代码,主要完成训练任务的是caffe.exe程序
相关资料:
http://blog.csdn.net/menuconfig/article/details/12837173
# LMDB
lmdb是openLDAP项目开发的嵌入式(作为一个库嵌入到宿主程序)存储引擎。其主要特性有:
参考:http://www.jianshu.com/p/yzFf8j
在CC中,lmdb是为了加速训练的需要,所以把图片文件通过convert_imageset.exe程序存放到一个lmdb数据库中,然后caffe.exe则读取该lmdb的数据作为训练数据,lmdb一般是在一个文件夹里面,有data.mdb和lock.mdb,如下图:
![](https://box.kancloud.cn/d5b701b4cc21adb98827dd72737e37d2_178x113.png)
# 数据集
这里我们指训练时候指定的数据集,有train数据集、val数据集、test数据集
通常我们会把train和val数据集制作为lmdb数据库,即:
![](https://box.kancloud.cn/4ac07e33fa23281b280dc6bc3aa2ec47_92x44.png)
而test数据集,我们只需要保持label-test.txt就好了
|这三个数据集的意义是||
|-|-|
train|用来训练的数据集,推荐占全部样本比重95%
val|用来训练时候做验证的数据集,推荐占全部样本比重4%
test|用来自己写代码测试训练结果模型的数据集,推荐占比1%
这三个数据集是完全不重叠的,就是说,他们之间是没有重复的图片文件。
# LOSS
## 损失、误差
神经网络的训练,是通过正向传播求loss,然后回传loss调整权重完成的。loss就是当前训练进展的主要指标,当loss足够小的时候,表示网络基本训练完成。至于多小,取决于当前任务,一般是0.01以下
# 学习率
## lr
learningrate,学习率
神经网络的训练,是通过正向传播求loss,然后回传loss调整权重完成的。这时候调整权重是根据loss计算然后乘以学习率,就是最终的调整量,所以学习率是控制调整强度的值,也是学习力度的控制,一般我们会给0.01、0.001等值去训练。学习率控制不好,会导致训练过程失败(即loss不下降或者精度不能达标)
![](https://box.kancloud.cn/f572045da397a6d9366f3dc3b423fc75_629x394.png)
# 过拟合、欠拟合
![](https://box.kancloud.cn/fb9aa7afd0901d40858a815e208b0e78_690x347.png)
图1欠拟合 图2完美 图3 过拟合
| 说明||
|-|-|
|欠拟合|学习的还不够,表达能力不够好
|过拟合|学习过头了,等于把样本全背下来记下来了,而没有学习应该学的知识,对新样本而言,泛化能力不好。泛化能力即扩展|能力,在新样本上表现的效果的能力
|中间这个|就是我们想要的数据表达模型被正确学习到的时候,这时候模型泛化能力最好,效果最好
# 迭代
指数据传入网络后进行一次前向运算的过程,称为一次迭代
# Batch
## 批次
训练时候,通常会一次一批样本去训练他,综合起来调整loss。这时候迭代一次是用了一批图片
# 数据集转换
![](https://box.kancloud.cn/687600519eb0eec7769598db4f6342e3_1697x533.png)
# 训练
![](https://box.kancloud.cn/13928f57f121e7f53ded94ba0a1aa12d_1590x901.png)
# 迁移学习
## finetune
又叫模型微调,利用已经训练好的模型,初始化一个新的训练任务。就是说,新任务根据这个旧模型开始学习,这样的学习就有一个很好的起点,就会很快得到好的结果。比如我们会在大数据集上训练一个模型(ImageNet数据集),然后新的小任务数据集上识别的时候,基于该模型去训练,将会很容易得到好的效果。若不这么做,我们新的训练任务通常需要非常大量的样本才能得到好效果。所以这个技术非常有用和关键。称做微调,是因为做迁移学习的时候学习率会比从头训练的学习率要低,表示根据已有模型以低的学习率来微调模型权重,训练新的任务。形象的说,一个模型因为见过很复杂的数据,那么他能够通过微微的调整来适应小的新数据,而且做到很好的效果。
主要的就是--weights这个参数指定的模型
# 暂停恢复
## resume
训练过程允许中断然后调整参数,然后使用保存的快照继续训练,就是所谓的resume
主要是--snapshot参数指定的solverstate快照实现继续训练
# 使用模型
![](https://box.kancloud.cn/b52b040a0d69af161ac784f995378aa3_1856x786.png)
- cc框架
- 视频课程
- 第一课:CC框架简介
- 第二课:相关基本概念
- 第三课:训练验证码识别
- 第四课:图像识别、分类、人脸识别
- 第五课:CNN+LSTM少样本高精度验证码识别
- 第六课:总结和展望
- 快速入门
- 常用码表-label-map
- 目标检测入门
- 人脸检测入门
- 重要说明必看
- 杂项
- CC框架使用须知
- 机器学习速成课程 谷歌
- cc4.0视频教程
- 前言
- cc4.0介绍
- 第一课笔记
- yzm-lstm.cpp 带注释
- 第二课笔记
- 众筹结果公示
- 第三课笔记
- 目标检测算法之SSD
- 第四课笔记
- 其他资讯
- YOLO3
- 资料
- 性能计算
- 笔记
- cc4.0训练流程图
- cc4.0 alexnet 训练 mnist
- cc4.0 googlenet 训练 mnist
- cc4.0 加层
- tensorflow -> caffemodel课题笔记
- getnetShape
- RPN
- 记录
- 数据集
- mnist
- Cifar10
- mtcnn样本转ssd样本易语言代码