当前位置:   article > 正文

Blob的基本用法

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

        cout<<"Size: "<<a.shape_string()<<endl;//利用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<caffe/util/io.hpp>//需要包含头文件

    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;n<b.num();n++)
        from(int c = 0;c < b.channels();c++)
            from(int h=0; h<b.height();h++)
                from(int w = 0;w < b.width();w++)
                    cout<<"b["<<n<<"]["<<c<<"]["<<h<<"]["<<w<<""]<<b.data_at(n,c,h,w);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小蓝xlanll/article/detail/144936?site
推荐阅读
相关标签
  

闽ICP备14008679号