您的位置:首页 > Web前端

【caffe跑试验遇到错误:Check failed: error == cudaSuccess (2 vs. 0) out of memory】:

2018-02-26 14:01 681 查看
网络和参数配置看论文:Convolution Neural Networks for Chinese Handwriting Recognition
lzj_solver.prototxt里面
(1)test_iter:测试样本总数/;
这个要与test layer中的batch_size结合起来理解。mnist数据中测试样本总数为10000,一次性执行全部数据效率很低,因此我们将测试数据分成几个批次来执行,每个批次的数量就是batch_size。假设我们设置batch_size为100,则需要迭代100次才能将10000个数据全部执行完。因此test_iter设置为100。执行完一次全部数据,称之为一个epoch
注意:之前用convert_imageset生成LMDB格式时,参数resize_height和resize_width一定要设置,不然会出现data_transformer.cpp里的错误

错误:Check failed: error == cudaSuccess (2 vs. 0)  out of memory
解决办法:GPU查内存命令:nvidia-smi
杀死进程命令:kill -9 PID PID为上面查出的进程号

(2)test_interval
test_interval: 500

测试间隔。也就是每训练500次,才进行一次测试。
mnist是一个手写数字数据库,由Google实验室的Corinna Cortes和纽约大学柯朗研究院的Yann LeCun等人建立,它有60,000个训练样本集和10,000个测试样本集,对应test_interval是500,我们是在此基础上作改动

在300个训练集和测试集中,样本分别有72,000和18,000,对应test_interval是600

在3755个训练集和测试集中,样本分别有901,200和225,300,对应test_interval是6260
(3)base_lrbase_lr用于设置基础学习率,在迭代的过程中,可以对基础学习率进行调整论文里学习率初始化为0.01,每个epoch衰减0.1如果学习的时候出现diverge(比如,你一开始就发现非常大或者NaN或者inf的loss值或者输出),此时你需要降低base_lr的值(比如,0.001),然后重新训练,这样的过程重复几次直到你找到可以work的base_lr。

(4)weight_decay:权重衰减,主要是为了防止过拟合
(5) 
max_iter: 20000

最大迭代次数。这个数设置太小,会导致没有收敛,精确度很低。设置太大,会导致震荡,浪费时间。
(6)
snapshot用于设置训练多少次后进行保存,默认为0,不保存。snapshot_prefix设置保存路径。
(7)display
没有影响,多少次迭代显示
(8)snapshot保存.caffemodel和.solverstate
注意:
stride<=kernel
卷积层设置:3*3 filter pad=1 stride=1
池化层设置:2*2 pixel window

选择论文里的I方法,而不是Accuracy最高的H
——————————————————————————————————————————————-———
模型1:



caffe在solverstate的基础上继续训练模型:https://www.cnblogs.com/k7k8k91/p/7798278.html
迭代1000:loss=3.9 lr=0.01
迭代1200:loss=3.55
lr=0.001 loss不太好打印log,画accuracy和loss图
------------------------------------------------------------------------------------------------------------
模型2:在模型1基础上,将gamma设为0.2,然后在solverstate1000基础上,进行训练,很简单:命令行后加参数--snapshot=【solverstate位置】即可
run_iter_1500  Loss=3.7
-------------------------------------------------------------------------------------------------------------------
模型3:lr<0.001时基本对参数改变没影响
stepsize=3000改变没影响
————————————————————————————————————————————————————

模型4:base_lr=0.1
loss增大太多
————————————————————————————————————————————————————
模型5:base_lr=0.03
影响不大
————————————————————————————————————————————————————
模型6:base_lr=0.008
影响不大
_____________________________________________________________________________________________________________________________

模型7:在标签正确的前提下,如果倒数第一个全连接层num_output > 实际的类别数,Caffe的训练是否会报错?

不会报错且无影响
将最后一层num_outout变成301没影响
将最后一层num_outout变成1000没影响
————————————————————————————————————————————————————————————————
模型8:在FC1024,FC1024,FC300之间加入dropout层 dropout rate=0.5,论文里的decay by0.1意味着gamma=0.9
---------------------------------------------------------------------------------------------------------------------------------------------
模型8用minist  10类手写体数字识别率达到99%
说明:网络无问题
--------------------------------------------------------------------------------------------------------------------------
模型8用casiaHWDB前10类数据 转数据时加gray=true 存储量小
loss=2.3
-------------------------------------------------------------------------------------------------------------------------------
模型8用casiaHWDB前10类数据 转数据时不加gray=true 存储量大 ,为加gray时两倍
loss=2.3
--------------------------------------------------------------------------------------------------------------------------------
模型8用casiaHWDB 测试集3755类别 训练集3755类别
效果不好
-------------------------------------------------------------------------------------------------------------------------------

用AlexNet跑自己的5类数据:

http://blog.csdn.net/gybheroin/article/details/54095399
改了crop_size=64、路径、 num_output=5
loss为0.00
用Mnist改进的11层网络达不到这样效果
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
用AlexNet跑自己的300类数据:
数据层,卷积层5层,全连接3层,accuracy和loss
改num_output=300
loss=6
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

用AlexNet跑自己的100类数据:
数据层,卷积层5层,全连接3层,accuracy和loss
改num_output=100
loss=4.6
------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

用AlexNet跑自己的50类数据:
数据层,卷积层5层,全连接3层,accuracy和loss
改num_output=50
loss=3.96
--------------------------------------------------------

用AlexNet跑自己的20类数据:
数据层,卷积层5层,全连接3层,accuracy和loss
改num_output=20
loss=3.01
迭代5000次
—--------------------------------------------------------------------------------------------------------
用AlexNet跑自己的10类数据:
数据层,卷积层5层,全连接3层,accuracy和loss
改num_output=10
从loss=2.30迭代3500次到loss=0 accuracy=0.9556
———————————————————————————————————————————————————
从20类开始改网络:
改了test_interval=100
test_iter=30
train:batch_size=200
test:batch_size=40
没影响loss=3.03
原网络架构:
训练数据层
测试数据层
卷积、激活、池化1
卷积、激活、池化2
卷积、激活3
卷积、激活4
卷积、激活、池化5
全连接、激活、丢弃6
全连接、激活、丢弃7
全连接8
Accuracy
Loss


先加卷积层
————————————————————————————————————————————————————
Windows caffe VGG人脸识别:https://www.cnblogs.com/chenzhefan/p/7624811.html
200个类  train 47633项
200个类  val 11731项
深度学习之图像分类模型VGG解读:http://blog.csdn.net/sunbaigui/article/details/46713483

【caffe跑试验遇到错误:Check failed: error == cudaSuccess (2 vs. 0) out of memory】:

http://blog.csdn.net/u013634684/article/details/50290909

base_lr是适用于所有层的学习率,而针对单个层,可以通过增加两个blobs_lr,用来调整该层的学习率.

Check failed: mdb_status == 0 (5 vs. 0) Input/output error

解决办法:转lmdb时存储容量过小
                  结束于2018年2月3日于南京                                                                                                                                  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐