Blob的基本用法

  1. Blob简介
    在caffe中Blob相当于tensorflow的tensor,即张量,是caffe框架中数据流的基本存储单位,caffe中关于数据的运算和存储都是基于Blob进行的。
  2. Blob的使用
    Blob是一个模板类,在创建对象时需要制定模板参数,例如:
Blob<float> a;//声明一个Blob对象a

        cout<<"Size: "<//利用shape_string()方法打印其尺寸信息,
        如:Size: 1 2 3 424)表示num channels height width 和元素总数.

        a.Reshape(1,2,3,4,);//设定该对象的大小

        float* p = a.mutable_cpu_data();//获得a的data指针

        float* q = a.mutable_cpu_diff()//获得a的diff(误差)指针

        a.Update();//执行update操作,将diff与data融合,做data = data - diff计算,是权值更新的最终实施者。

        a.num(),a.channels(),a.height(),a.width(),分别表示对象a中不同维度中的元素数量

        a.data_at(n,c,h,w);//表示取a中位置为(n,c,h,w)处的数据

        a.asum_data()用于计算并返回绝对值之和(L1范数)

        a.sunsq_data()用于计算并返回平方和(L2范数)

    Blob的强大之处在于可以同步CPU/GPU上的数据。

Blob的内部值保存到磁盘
    #include//需要包含头文件

    BlobProto bp;//构造一个BlobProto对象
    a.ToProto(&bp,true);//将a序列化,连同diff(默认不带)
    WriteProtoToBinaryFile(bp,"a.blob");//写入磁盘文件“a.blob”

    BlobProto bp2;
    ReadProtoFromBinaryFileOrDie("a.blob",&bp2);//从序列化文件中读取磁盘文件

    Blob<float> b;//建立一个Blob对象
    b.FromProto(bp2,true);//从序列化对象中克隆b(连同形状)

    //然后就可以使用循环将b的内容打印出来
    from(int n = 0;nfrom(int c = 0;c < b.channels();c++)
            from(int h=0; hfrom(int w = 0;w < b.width();w++)
                    cout<<"b["<"]["<"]["<"]["<""]<

由此可见,BlobProto对象实现了磁盘、内存之间的数据通信。这对于保存、载入训练好的模型权值非常使用。

你可能感兴趣的:(C/C++,机器学习,caffe)