Caffe 遇到过的问题

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/roach_zfq/article/details/54287789

2017.01.09

make -j

命令导致系统奔溃,大概已经编译完了,不过就是卡在那个终端不退出,鼠标键盘任何输入都没有反应,很奇怪,前两天还没有这种情况的。。目前原因不明,不过在多次尝试后,使用

make -j4   或   make -j8

命令就可以正常编译了.

  • 开启debug后输出太多Prefetch batch和Read time信息:
I0109 18:01:51.030918 28519 data_layer.cpp:102] Prefetch batch: 0 ms.
I0109 18:01:51.030925 28519 data_layer.cpp:103]      Read time: 0.002 ms.
I0109 18:01:51.030927 28519 data_layer.cpp:104] Transform time: 0.02 ms.
I0109 18:01:51.031420 28513 caffe.cpp:306] Batch 296388, accuracy = 1
I0109 18:01:51.031522 28519 data_layer.cpp:102] Prefetch batch: 0 ms.
I0109 18:01:51.031527 28519 data_layer.cpp:103]      Read time: 0.002 ms.
I0109 18:01:51.031530 28519 data_layer.cpp:104] Transform time: 0.021 ms.

一开始还很困惑,后来才发现在makefile.comfig里忘了把debug关了,关掉果然就好了~

2017.01.10

今天在gdb和eclipse里调试caffe的test命令,真的是气死我了。从昨天晚上到现在终于想明白了!!!
caffe的cpu_datab和gpu_data确实可以实现自动同步,不过调试时使用p *(bottom[0].data_.px)输出

$65 = {cpu_ptr_ = 0x1020a402a00, gpu_ptr_ = 0x10213000000, size_ = 1600, head_ = caffe::SyncedMemory::SYNCED, own_cpu_data_ = true, cpu_malloc_use_cuda_ = true, own_gpu_data_ = true, gpu_device_ = 0}

p *((float*)0x10213000000)@200(batch是200)输出:
输出的一直全都是0,(其中0x10213000000为gpu_data的地址)

一开始以为我水平不够,print格式不太对,嵌套好几层指针和引用,于是不用gdb调试,试着用ide可以更直观的查看内存中的情况,然后花了三四个小时配置好了eclipse attach to process调试C++程序,结果还是一样的!!

突然就想到gdb print cpu-data指针和gpu_data指针作用能一样吗?应该都把地址作为默认的内存(内存条)上的地址输出了啊,而gpu_data明显是存在显卡的显存上的啊,那你print的就肯定不是gpu_data了嘛!!真是SB

最后先获得cpu_data指针,再从cpu_data指针读取输出预测的概率值

  const Dtype* prob_data_cpu_data = prob_.cpu_data(); //获取cpu_data
  fpzfq << *(prob_data_cpu_data + 1) << "\n";//fpzfq是ofstream对象

猜你喜欢

转载自blog.csdn.net/roach_zfq/article/details/54287789