Caffe 遇到过的问题

7 篇文章 0 订阅
5 篇文章 0 订阅

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对象
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值