caffe 所有層的參數全部定義在一個caffe.proto 的文件裏面,裏面有每個參數的詳細解釋,點擊打開鏈接
在protocol buffers的官網的教程中,看到了一些基本的語法和編譯使用,爲了我們更好的理解caffe
自定義一個.proto文件其實是很簡單,如下所示
syntax = "proto2";
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 phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
首先是指定systax 是多少,目前有proto2 和proto3, caffe.proto 用的是proto2
然後是定義package, 這個是爲了防止多個.protot 引起衝突,所以每個.proto要聲明一個package,類似我們建的工程項目名
接下就是寫message,message裏面有三個修飾符,分別爲required,optional 和 repeated
required: 這個參數必須要存在,而且只有一個
optional: 這個參數可以有也可以無,但是不超過一個
repeated: 這個參數可以重複多次
每個參數後面會有="1","2","3"... 這是爲了標識這些參數,在進行編碼時
當編寫完.protot文件時,我們可以使用protoc 來編譯
protoc -I=. --cpp_out=. ./addressbook.proto
在當前目錄下會產生兩個文件
如果要使用這裏面的函數,將頭文件include進去就可以了.