Blob的基本用法

12 篇文章 0 订阅
5 篇文章 0 订阅
  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对象实现了磁盘、内存之间的数据通信。这对于保存、载入训练好的模型权值非常使用。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用AJAX上传Blob文件,你需要执行以下步骤: 1. 创建XHR对象 在JavaScript代码中创建XHR对象,它是用于与服务器进行通信的核心组件之一。通过使用XHR对象,可以用异步的方式上传Blob文件。 ``` var xhr = new XMLHttpRequest(); ``` 2. 创建FormData对象 FormData对象用于存储待上传的文件和相关信息。你需要将选定的Blob文件与该对象进行关联,以便在发送XHR请求时传递给服务器。 ``` var formData = new FormData(); formData.append('blob', blobFile); ``` 其中,'blob'是指上传的文件名,blobFile是指待上传的Blob对象。 3. 设置XHR对象的请求属性 对XHR对象进行配置,包括请求的方法、请求的URL、是否异步以及任何需要传递给服务器的头部信息。 ``` xhr.open('POST', 'upload.php', true); xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest'); ``` 其中,'upload.php'是指接收文件上传请求的服务器端脚本文件,'X-Requested-With'是一个请求头,用于告诉服务器请求的类型。 4. 监听XHR对象的上传进度 通过监听XHR对象的上传进度,可以在文件上传过程中实时更新进度条或提供其他UI反馈。 ``` xhr.upload.addEventListener('progress', function(event) { var percent = event.loaded / event.total * 100; console.log(percent); }); ``` 其中,'progress'是指上传进度事件类型,event.loaded表示已经上传的字节数,event.total表示文件总大小。 5. 发送XHR请求 最后,使用XHR对象的send()方法将FormData对象发送到服务器。 ``` xhr.send(formData); ``` 以上就是使用AJAX上传Blob文件的基本步骤,你可以根据需要在其中添加更多细节和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值