caffe源码学习(一) google protocol buffer

这是本人第一次写博客,所以先啰嗦一下关于自己为什么开始写博客的想法。当我遇到问题的时候,和大家一样,经常谷歌或百度,这时就会看到很多人在博客上分享他们的工作经验,而这些经验经常帮助我解决问题,所以每次都对这些人心存感激。之前也想过要把自己的东西写到博客上和大家分享,遗憾的是每次都闲麻烦、浪费时间,感觉没什么必要。直到最近决定深入学习caffe,经常会看一些关于caffe源码学习的博客,比如:http://www.cnblogs.com/louyihang-loves-baiyan/,但这样的学习过程不是看看就能掌握的,即使这些博客写的很好。所以参考大家分享的经验的同时,也来总结自己的学习过程,并与大家分享,既是为了更好的学习,也为了和大家交流,同时希望得到批评指正。

首先还是说明一下自己已经了解的一些东西。第一,深度学习的基础知识,比如神经网络,BP算法等;第二,对caffe的简单了解和使用,主要参考caffe官网;第三,之前一直用torch,至于为什么还要学习caffe,主要是因为自己看的很多文章都是基于caffe实现的,为了更好的学习别人的方法,不可能每次都用torch重新实现,于是决定深入学习caffe,同时来提高coding的能力。

读caffe代码时,用的是Qt Creator,如果有更好的工具,期待分享哦。

Protocol Buffer

使用caffe时,会发现,我们要定义一个网络或设置优化参数时,只需要写一个ptototxt文本文件就好了。原来Protocol Buffer就是来做这件事情的。首先通过官方C++基本教程学习,但是这里存储/解析的时二进制格式,像我们用的易读的文本格式会有些不同。先给出参照官方C++基本教程和caffe源码(io.cpp)写的一个解析文本文件的例子(read.cpp, write.cpp, addressbook.proto, 和储存/解析文本address.txt)。
address.proto

package tutorial;

message Person {
  required string name = 1;
  required int32 id = 2;
  optional string email = 3;

  enum PhoneType {
    MOBILE = 0;
    HOME = 1;
    WORK = 2;
  }

  message PhoneNumber {
    required string number = 1;
    optional PhoneType type = 2 [default = HOME];
  }

  repeated PhoneNumber phone = 4;
}

message AddressBook {
  repeated Person person = 1;
}

write.cpp(某些头文件可能是不必要的)

// See README.txt for information and build instructions.

#include <iostream>
#include <fstream>
#include <string>
#include <fcntl.h>
#include <google/protobuf/io/coded_stream.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include <google/protobuf/text_format.h>
#inc
  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值