caffe入门----Blob(一)(含各种编译错误解决)

本文介绍了Caffe中基础数据结构Blob,详细解析其4维特性[num_, channels_, height_, width_]。在实践中,通过代码展示Blob的使用。在编译Caffe时遇到的问题,如找不到caffe.proto头文件、undefined reference错误,以及运行时共享库找不到等问题,文章提供了解决方案,包括使用protoc生成protobuf文件,安装特定版本的glog和gflags,并调整库搜索路径。" 90544523,8019754,链表操作:反转、合并、排序与查找,"['数据结构', '链表', '算法']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Blob是caffe最基础的数据结构。它有4维[num_,channels_,height_,width_]

我们通过代码来看看

#include <vector>
#include <iostream>
#include <caffe/blob.hpp>
using namespace caffe;
using namespace std;

int main(void){
    //声明一个Blob变量
    Blob<float> a;
    //打印形状,是0现在
    cout<<"Size:"<<a.shape_string()<<endl;
    //reshape成1,2,3,4
    a.Reshape(1,2,3,4);
    cout<<"Size:"<<a.shape_string()<<endl;
    //创建Blob对象之后,可以通过mutable_cpu_data函数改变其值
    float *p = a.mutable_cpu_data();
    for (int i = 0; i < a.count(); ++i)
    {
        p[i]= i;
    }

    // int u = a.num();
    for(int u = 0; u<a.num(); u++){
        for(int v = 0; v < a.channels(); v++){
            for(int w=0; w<a.height(); w++){
                for(int x=0; x<a.width(); x++){
                    cout<<"a["<<u<<"]["<<v<<"]["<<w<<"]["<<x<<"]="<<a.data_at(u,v,w,x)<<endl;
                }
            }
        }
    }

    return 0;
}

命令行编译:

g++ -o app3 blob_demo.cpp -I $CAFFE_ROOT/include/ -D CPU_ONLY -I /home/yui/code/caffe/.build_release/ -I $CAFFE_ROOT/src/ -L $CAFFE_ROOT/bulit/lib -L /home/yui/code/caffe/.build_release/lib/ -L /usr/local/lib/libgflags.so.2 -L /usr/local/lib/libgflags_nothreads.so -L /usr/local/lib/libgflags.so.2 -lcaffe -lglog -lgflags -lboost_system -fPIC -lpthread

就是这短短的代码编译频频出错。解决办法归纳如下:
出现

fatal error: caffe/proto/caffe.pb.h: No such file or directory

解决方法: 用protoc从caffe/src/caffe/proto/caffe.proto生成caffe.pb.h和caffe.pb.cc

wuliwei@wulw:~/caffe/src/caffe/proto$ protoc --cpp_out=/home/wuliwei/caffe/include/caffe/ caffe.proto

然后出现了:

undefined reference to symbol ‘_ZN6google4base21CheckOpMessageBuilder7ForVar2Ev’

出现原因是因为用到了google的glog和gflags,但是找不到所以不认识。解决方法安装glog和gflags。不知道为啥安装高版本的gflags不能兼容低版本的,只好装了gflags2.0才能跑。其中装gflags2.1的时候报错:

找不到config.h

解决办法找到/home/yui/code/reviews/gflags-2.1.1/src下的util.h注释掉#include

// #include <config.h>

编译没有出错,但是运行出现:

./app3: error while loading shared libraries: libgflags.so.2: cannot open shared object file: No such file or directory

原因找libgflags.so.2的时候路径为 /usr/lib, 解决办法:

sudo cp /usr/local/lib/libgflags.so.2 /usr/lib/

出现:

./app3: error while loading shared libraries: libcaffe.so.1.0.0-rc5: cannot open shared object file: No such file or directory

解决办法:

export LD_LIBRARY_PATH=$CAFFE_ROOT/build/lib:$LD_LIBRARY_PATH

至此出结果:

这里写图片描述

参考:
http://blog.youkuaiyun.com/xmzwlw/article/details/48270225
赵永科 《深度学习:21天实战Caffe》

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值