为了caffe(5)学人家博客的 接上一篇

为了caffe(5)学人家博客的

 

 

 

 

开机了, 先测试,,,每次开机都要这样,,,,很关键

dong@dong-Lenovo-G480:~/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/release$ ./deviceQuery

./deviceQuery Starting...

 

 CUDA Device Query (Runtime API) version (CUDART static linking)

 

modprobe: FATAL: Module nvidia-uvm not found.

cudaGetDeviceCount returned 30

-> unknown error

Result = FAIL

 

挂载uvm

 

再测试dong@dong-Lenovo-G480:~/NVIDIA_CUDA-7.5_Samples/bin/x86_64/linux/release$ ./deviceQuery

 

得到正确结果啦

 

 

下一步  学习第19篇文章

 

ps:在网页python jupyter中  报错不明显,崩溃了,不能查错,,仅作好看,试试ipython,,ipython也不好用仅仅多了代码补全,连上下移动都不行啊

 

 

没做完整个过程,,知道迭代次数越多,  精确度基本上是在上升就行了。。。  

 

 

学习第20篇文章  Caffe学习系列(20):用训练好的caffemodel来进行分类

 

caffe程序自带有一张小猫图片,存放路径为caffe根目录下的 examples/images/cat.jpg, 如果我们想用一个训练好的caffemodel来对这张图片进行分类,那该怎么办呢? 如果不用这张小猫图片,换一张别的图片,又该怎么办呢?如果学会了小猫图片的分类,那么换成其它图片,程序实际上是一样的。

开发caffe的贾大牛团队,利用imagenet图片和caffenet模型训练好了一个caffemodel(这个模型迭代了30多万次,在23章里又提到了这个),  供大家下载。要进行图片的分类,这个caffemodel是最好不过的了。所以,不管是用c++来进行分类,还是用python接口来分类,我们都应该 准备这样三个文件:

ps:caffenet是什么?大概就是一种网络结构模型吧,就像lenet是一种网络结构模型,,caffenet就是一个名字,这个名字写在prototxt文件里面,关联着数据集文件(而数据集有一个特定的大小),所以在生成caffemodel文件时,这个caffemodel文件就对应一个有特定大小的数据集

1、caffemodel文件。 

2、均值文件。

有了caffemodel文件,就需要对应的均值文件,在测试阶段,需要把测试数据减去均值。

3、synset_words.txt文件

在调用脚本文件下载均值的时候,这个文件也一并下载好了。里面放的是1000个类的名称。

 

 

 

 

# sudo ./build/examples/cpp_classification/classification.bin \

  models/bvlc_reference_caffenet/deploy.prototxt \   

  models/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel \  

  data/ilsvrc12/imagenet_mean.binaryproto \

  data/ilsvrc12/synset_words.txt \

  examples/images/cat.jpg

命令很长,用了很多的\符号来换行。可以看出,从第二行开始就是参数,每行一个,共需要4个参数

运行成功后,输出top-5结果:

---------- Prediction for examples/images/cat.jpg ----------

0.3134 - "n02123045 tabby, tabby cat"

0.2380 - "n02123159 tiger cat"

0.1235 - "n02124075 Egyptian cat"

0.1003 - "n02119022 red fox, Vulpes vulpes"

0.0715 - "n02127052 lynx, catamount"

即有0.3134的概率为tabby cat, 有0.2380的概率为tiger cat ......

 

 

 

 

也可以用python,  既可以自己写python来实现上面的功能(楼主的代码,我大概能懂,细节不懂),也可以用人家写好的pyton文件(要修改一下,不知道楼主是怎么知道应该怎么修改的)

 

 

 

 

 

Caffe学习系列(21):caffe图形化操作工具digits的安装与运行

nvidia为了卖出更多的显卡,对深度学习的偏爱真是亮瞎了狗眼。除了cudnn, 又出了digits,真是希望小学生也能学会深度学习,然后去买他们的卡。

nvidia digits是一款web应用工具,在网页上对caffe进行图形化操作和可视化,用于caffe初学者来说,帮助非常大。

 

可以由图片,生成lmdb文件,,

Caffe学习系列(22):caffe图形化操作工具digits运行实例

可以建立模型,可以输入一张图片来进行测试,会得到可能对应的图片的概率,一切都是网页操作,并且还有图表啥的,可视化,一目了然。。。

 

 

 

Caffe学习系列(23):如何将别人训练好的model用到自己的数据上

 

 

caffe团队用imagenet图片进行训练,迭代30多万次,训练出来一个model。这个model将图片分为1000类,应该是目前为止最好的图片分类model了。

假设我现在有一些自己的图片想进行分类,但样本量太小,可能只有几百张,而一般深度学习都要求样本量在1万以上,因此训练出来的model精度太低,根本用不上,那怎么办呢?

那就用caffe团队提供给我们的model吧。

因为训练好的model里面存放的就是一些参数,因此我们实际上就是把别人预先训练好的参数,拿来作为我们的初始化参数,而不需要再去随机初始化 了。图片的整个训练过程,说白了就是将初始化参数不断更新到最优的参数的一个过程,既然这个过程别人已经帮我们做了,而且比我们做得更好,那为什么不用他 们的成果呢?

使用别人训练好的参数,必须有一个前提,那就是必须和别人用同一个network,因为参数是根据network而来的。当然,最后一层,我们是可 以修改的,因为我们的数据可能并没有1000类,而只有几类。我们把最后一层的输出类别改一下,然后把层的名称改一下就可以了。最后用别人的参数、修改后 的network和我们自己的数据,再进行训练,使得参数适应我们的数据,这样一个过程,通常称之为微调(fine tuning).(就算是这样,我的显卡有能里完成这个计算吗????caffenet可是277*277的的最小图片大小啊)

 

 

楼主使用digits做的。。。

如果你不用digits,而直接用命令操作,那就更简单,只需要修改一个train_val.prototxt的配置文件就可以了,其它都是一样的操作。

你好,我是新手,就是想问一下不用digits如何进行微调,改了train_val.prototxt的配置文件之后再做什么呢。

  

#12楼[楼主]
不用digits,就要用命令行,可参考我的《Caffe学习系列(10):命令行解析》,里面有提到如何微调

 

 

 

 

特别注意:

 

#15楼 2016-05-10 20:37 | weichang88688   

您好,看到您的教程学到 很多,我没用digst,直接用的命令操作,但是由于电脑原因,我在做图片的lmdb的时候吧图片设置成125~125的,然后运行的时候就出现了错误错 误内容是:Check failed: datum_height == data_mean_.height() (125 vs. 256) ,我知道我就用125~125的不用256的应该如何修改呢?谢谢

支持(0)HYPERLINK "javascript:void(0);"反对(0)

  

#16楼[楼主] 2016-05-12 14:19 | denny402   

@ weichang88688
模型一旦确定,图片的尺寸也就定了。比如lenet模型图片尺寸是28*28, alex模型是256*256。如果你想使用alex模型,又不想改变图片大小 ,肯定不行的,要么你把图片resize成256,要么修改模型。

 

 

 

 

最后我要说出来:我是用了一个什么样的数据集(多少训练数据,多少测试数据,一共分为几类),用了什么样的训练验证prototxt文件,什么样的solver.prototxt文件,什么样的网络(leNet?axleNet?googleNet?)来训练的,生成一个caffemodel,

然后说我自己的显卡610能力有限,只能训练小的模型,而且精度不高,我试着用稍微大一点图片,就会立即崩溃,有时候可以选用人家的模型,修改一下,用到自己的应用上面

 

然后我用这个caffemodel,,配合一个什么样的deplay文件,对什么图片进行分类,识别测试?怎么测试的?用的是c++命令行?还是用的python   是不是参加了kaggle

 

 

看完了楼主的文章,只能吹mnist的牛,

 

问:你是怎么理解caffe? 

答;

引用  我的 为了caffe(六)文章里面的:

 

ps: 训练和测试的顺序是什么样的?  

不是:  

 先训练跑一遍,再测试跑一遍,跑测试的时候不停的出accuracy和loss,这样的话accuracy和loss就不会变化了,跟观察到的不一样

 

我猜是:   

先跑一遍完整的训练集数据,这时候得到了一个caffemodel(caffemodel本质上是一堆参数,这些参数不一定会以caffemodel的文件格式保存下来,这就涉及到参数snap_shot,它表示多少次完整训练之后,换个说法,多少代之后保存一次caffemodel文件),对于这个caffemodel跑一遍完整的测试数据,得到一个accuracy和loss,再跑一遍完整的训练集数据,这时候又可以得到了一个caffemodel,再一次对于这个caffemodel跑一遍完整的测试数据,就再一次得到一个accuracy和loss,一般来说这个accuracy上升和loss降低。。。。这也符合观察到的情况

 

pss: 那么这个训练和测试的过程怎么对应,网络图呢?比如在mnsit上,以上说的这些怎么对应leNet的那个网络结构??  

我猜的:

那就是无数次的运行这个网络图,从上往下的, 第一次运行之后这个网络中会有很多参数,第二次这些图输入之后,网络中的参数就改变了,优化了,所以就会使得accuracy上升和loss降低。无数次输入图片,改变参数之后,网络达到一个很优化的各个参数。如果这时候测试它,会得到很高accuracy和很低的loss。

这个参数就是卷积核的数值,卷积核大小是固定的,但是它的每个点上的数值,是一次次优化最终确定的。还有不但是卷积核的数值,还有偏置量也是通过优化确定的。。

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值