Blob的基本用法

本文介绍了Caffe框架中Blob的概念及使用方法,Blob类似于TensorFlow中的张量,是Caffe中数据流的基本存储单位。文章详细讲解了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);

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值