Caffe实战(十四):数据与模型介绍

一个完整的深度学习系统最核心的两个方面是数据和模型。
 

数据集:训练集,验证集和测试集

机器学习中这三种数据集合非常容易弄混,特别是验证集和测试集:
  • 训练集。这个是最好理解的,用来训练模型内参数的数据集,Classfier直接根据训练集来调整自身获得更好的分类效果
  • 验证集。用于在训练过程中检验模型的状态,收敛情况。验证集通常用于调整超参数,根据几组模型验证集上的表现决定哪组超参数拥有最好的性能。同时验证集在训练过程中还可以用来监控模型是否发生过拟合,一般来说验证集表现稳定后,若继续训练,训练集表现还会继续上升,但是验证集会出现不升反降的情况,这样一般就发生了过拟合。所以验证集也用来判断何时停止训练
  • 测试集。测试集用来评价模型泛化能力,即之前模型使用验证集确定了超参数,使用训练集调整了参数,最后使用一个从没有见过的数据集来判断这个模型是否Work。

关于过拟合和欠拟合

过拟合(overfitting)和欠拟合(underfitting)是导致模型泛化能力不高的两种常见原因,都是模型学习能力与数据复杂度之间失配的结果。“欠拟合”常常在模型学习能力较弱,而数据复杂度较高的情况出现,此时模型由于学习能力不足,无法学习到数据集中的“一般规律”,因而导致泛化能力弱。与之相反,“过拟合”常常在模型学习能力过强的情况中出现,此时的模型学习能力太强,以至于将训练集单个样本自身的特点都能捕捉到,并将其认为是“一般规律”,同样这种情况也会导致模型泛化能力下降。过拟合与欠拟合的区别在于,欠拟合在训练集和测试集上的性能都较差,而过拟合往往能较好地学习训练集数据的性质,而在测试集上的性能较差。在神经网络训练的过程中,欠拟合主要表现为输出结果的高偏差,而过拟合主要表现为输出结果的高方差。
 
(这个定义似乎有点不严谨)
当模型参数远大于数据量时---->欠定方程---->存在多组解的可能---->过拟合;
当模型参数远小于数据量时---->超定方程---->存在无解或解的准确率低的可能---->欠拟合;
 
可以从模型学习能力理解上面过程:
  • 模型的参数越多,代表学习能力越强,如果数据量很少,则模型能够把数据的所有特征学习完,这就很容易完成过拟合情况。
  • 如果模型的参数很少,学习能力不强,而数据量又很大,也不能够学习到全面的有效特征,就出现欠拟合的情况。
 
关于过拟合和欠拟合最终要归结于模型的学习能力和数据的有效特征是否匹配。 

Caffe I/O模块

在运行Caffe例程前,首先需要将原始数据转换为LMDB格式(参见 Caffe实战(九):MNIS(手写体数字识别)例程),训练网络时则需要由数据读取层(DataLayer)不断地从LMDB读取数据,送入后续卷积、下采样等计算层。Caffe I/O模块的效率直接影响到处理效果。
 
Caffe数据读取层( DataLayer )是Layer的派生类。除了读取LMDB 、LEVELDB 之外,也可以从原始图像直接读取( lmageDataLayer) 。
数据结构描述
message DataParameter { ... }
 
数据读取层声明位于include/caffe/data_layers.hpp
 
Caffe的数据变换器( DataTransformer) 主要提供了对原始输入图像制预处理方法,包括随机切块、随机镜像、幅度缩放、去均值、灰度/色度变换等。
数据结构描述
message TransformationParameter{ ... }
 
数据读取层声明位于include/caffe/data_transformer.hpp

Caffe模型

一个深度学习模型通常由三部分参数组成:
  • 可学习参数(Learnable Parameter),又称可训练参数、神经网结权系数、权重,其数值由模型初始化参数、误差反向传播过程控制,一般不可人工干预;
  • 结构参数(Archetecture Parameter) ,包括卷积层/全连接即不采样层数目、卷积核数目、卷积核大小等描述网络结构的参数,一旦设定好,在网络训练阶段不能更改;值得注意
的是,训练阶段网络结构参数和预测阶段结构参数很可能不同。
  • 训练超参数( Hypêr":Pa.rameter) ,用来控制网络训练收敛的参数,训练阶段可以自动或手动调节以获得更好的效果,预测阶段不需要该参数。
 
在Caffe中,一个模型的三部分参数分别由不同模块定义和实现:
  • 可学习参数在内存中使用Blob对象保持,必要时以二进制ProtoBuffer文件(*.caffemodel)形态序列化并存储于磁盘上,便于进一步微调( finetune ,又称精调)、共享〔例如参数服务器Parameter Server, PS) 、性能评估( benchmark.)。
  • 结构参数使用ProtoBuffer文本格式(*.prototxt ) 描述,网络初始化时通过该描述文件构建Net对象、Layer 对象形成有向无环图结构,在Layer与Layer之间、Net输入源和
输出时均为持有数据和中间结果的Blob对象。
  • 训练起参数同样使用ProtoBuffer文本格式(*.prototxt ) 描述,训练阶段利用该描述文件构建求解器(Solver) 对象,该对象按照二定规则在训练网络时自动调节这些超参数值。

Caffe Model Zoo

Caffe Model Zoo则提供了一个分享模型的平台,世界各地的研究人员都可以把自己的训练成果共享给社区中更多的人使用,节省人力、物力。
 
例程:基于一个已训练模型的图片分类
 
(1)下载meta数据
cd data/ilsvrc12/
./get_ilsvrc_aux.sh
 
(2)下载caffenet模型
cd ../../models/bvlc_reference_caffenet/
wget http://dl.caffe.berkeleyvision.org/bvlc_reference_caffenet.caffemodel
 
(3)执行分类程序
./build/examples/cpp_classification/classification.bin models/bvlc_reference_caffenet/deploy.prototxt                      ---- 模型描述文件
                                                       models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel   ---- *.caffemode模型权值文件
                                                       data/ilsvrc12/imagenet_mean.binaryproto                             ---- 图像均值文件
                                                       data/ilsvrc12/synset_words.txt                                      ---- 图像类别标签信息
                                                       examples/images/cat.jpg                                             ---- 输入待分类图像

 

top1---预测的label取最后概率向量里面最大的那一个作为预测结果,如过你的预测结果中概率最大的那个分类正确,则预测正确,否则预测错误;
top5---最后概率向量最大的前五名中,只要出现了正确概率即为预测正确,否则预测错误。
 
据此来计算正确率、错误率。
 

参考

  • 《深度学习:21天实战Caffe》
 
 

Caffe实战(十四):数据与模型介绍

上一篇:tp5 解决root生成的文件,www用户没有写权限的问题


下一篇:Qto_MemberBaseQuantities