caffe的学习之路---Blob的基本用法
来源:互联网 发布:信息收集软件 编辑:程序博客网 时间:2024/06/15 03:19
首先,参考书籍《21天实战caffe》
以前没有C++基础,所以第一次看这本书时候觉得好垃圾;
现在有了C++基础,再次看这本书,发现还是很值得学习。
在本文之前,我已经把官方tutorial看完。
要看懂blob.hpp建议将<C++ Primer>前七章看完,再学习caffe源码。
如果要看layer的相关文件,至少把前十五章看完,一起加油。
所以现在开始读源码,首先还是类模板Blob。
下面是自己将Blob写入磁盘,从磁盘读取内容存入Blob的程序,当然《21天实战caffe》的源码。主要写给自己看。
首先先说几个Member Function
1 void Reshape(const int num,const int channels,const int height,const int weight)
void Reshape(const vector<int> &shape)
这2个函数的作用是重构blob的维数(Dim)
2 void FromProto(const BlobProto &proto, bool reshape=true)
用法a.FromProto 将Blob类型的变量a写入一个类型为BlobProto的变量proto中
这是数据从Blob到磁盘的中间处理层(作用就是序列化)
3 void ToProto(BlobProto *proto, bool write_diff=fasle )
第二个参数输入true (将diff也序列化,默认是只把data序列化)
另外需要认识2个IO函数
1. void WriteProToBinaryFile(const Message &proto,const char *filename)
void WriteProToBinaryFile(const Message &proto,const string filename)
从名字就看出是将BlobPro写入二进制文件filename
2. bool ReadProtoFromBinaryFile(const char *filename,Message *proto)
bool ReadProtoFromBinaryFile(const string &filename,Message *proto)
#include <vector>#include <iostream>#include <caffe/blob.hpp>#include <caffe/util/io.hpp>using namespace caffe;using namespace std;int main(){ Blob<float> a; a.Reshape(1,2,3,4); float *p=a.mutable_cpu_data(); float *q=a.mutable_cpu_diff(); for(int i=0;i<a.count();i++){ p[i]=i;q[i]=a.count()-i-1; } a.Update(); 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; } } } } BlobProto bp1; a.ToProto(&bp1,true); WriteProtoToBinaryFile(bp1,"a.blob"); BlobProto bp2; ReadProtoFromBinaryFile("a.blob",&bp2); Blob<float> b; b.FromProto(bp2,true); for(int u=0;u<b.num();u++){ for(int v=0;v<b.channels();v++){ for(int w=0;w<b.height();w++){ for(int x=0;x<b.width();x++){ cout<<"b["<<u<<"]["<<v<<"]["<<w<<"]["<<x<<"]="<<b.data_at(u,v,w,x)<<endl; } } } } return 0;}
- caffe的学习之路---Blob的基本用法
- 【深度学习】【Caffe源代码解读1】笔记19 Caffe的基本数据结构之Blob
- caffe源码学习--blob基本用法(基于《21天实战caffe》)
- CAFFE 学习-1:基本的CAFFE结构
- Caffe学习之一:Caffe的基本结构
- caffe 中 BLOB的实现
- caffe大厦的砖头Blob
- caffe基本数据结构---blob
- caffe基本数据结构---blob
- 基于《21天实战caffe》blob学习时的问题
- CAFFE源码学习笔记之六-Blob
- Caffe源码使用(一)------Blob基本用法
- Azure Blob Storage 基本用法 -- Azure Storage 之 Blob
- 【深度学习】【Caffe源代码解读2】笔记20 Caffe的基本数据结构之Layer
- 【深度学习】【Caffe源代码解读3】笔记21 Caffe的基本数据结构之Net
- Caffe Blob.hpp 学习
- CAFFE 学习-2:BLOB
- caffe代码学习--Blob
- 设计模式-抽象工厂设计模式
- ArcEngine 总结(持续更新)
- hdu ---2001做题笔记(c++)
- 阶段笔记浅谈ContentProvider&ContentResolver&SQLite
- 【PC+PE】minecraft搭建服务器
- caffe的学习之路---Blob的基本用法
- Apache配置php
- 使用VMware虚拟机安装Mac OS
- Python下pip安装scrapy
- C3 程序的机器级表示
- 精密微弱信号接地
- Java的四种线程池以及参数介绍
- hdu ---2002做题笔记(c++)
- 数组总结