tensorflow資料結構-MetaInfoDef
阿新 • • 發佈:2018-11-08
計算圖結構
- MetaGraphDef(計算圖)
- MetaInfoDef(運算方法)
- OpList(運算方法集合)
- OpDef(運算方法)
- ArgDef(輸入,輸出)
- AttrDef(屬性)
- OpDef(運算方法)
- OpList(運算方法集合)
- GraphDef (連線結構)
- NodeDef(節點)
- SaverDef (模型持久化)
- CheckpointFormatVersion(模型定義使用的版本)
- map<string, CollectionDef> (集合)
- NodeList(節點value)
- BytesList(序列化value)
- map<string, SignatureDef>(簽名)
- AssetFileDef (權重值)
- MetaInfoDef(運算方法)
MetaInfoDef
文章目錄
記錄計算圖中所有是使用到的運算方法
message MetaInfoDef { // 使用者指定的版本字串 可以是模型和修訂的名稱, // 此模型已經過訓練的步驟等。 string meta_graph_version = 1; // 此graph_def的生產者使用的(運算方法)OpDefs的副本。 // 一個運算方法在這裡只能出項一次。 // 刪除了graph_def中未使用的描述和操作。 OpList stripped_op_list = 2; // 序列化的protobuf。 可以是建立或修改此元圖的時間,也可以是模型的名稱。 google.protobuf.Any any_info = 3; // 使用者在meta_graph上提供了標籤,幷包含了graph_def。 // MetaGraphDefs應標記其功能或用例。 // 例子:“train”,“serve”,“gpu”,“tpu”等。 // 這些標籤使載入程式能夠訪問適合於特定用例或執行時環境的MetaGraph。 repeated string tags = 4; // 由框架指定 string tensorflow_version = 5; // 由框架指定 string tensorflow_git_version = 6; // 一個標誌,表示是否已從此graph_def中的節點中刪除了預設值的attrs。 bool stripped_default_attrs = 7; }
OpList
定義運算集合
一個OpDefs的集合,集合意味著沒有重複的
message OpList {
repeated OpDef op = 1;
};
OpDef
定義運算結構的具體實現
message OpDef {
string name = 1;
// 可重複的ArgDef結構的輸入
repeated ArgDef input_arg = 2;
// 可重複的ArgDef結構的輸出
repeated ArgDef output_arg = 3;
// 記錄上面輸入,輸出中tyep_attr屬性的具體意義
repeated AttrDef attr = 4;
// 可以根據計算圖的版本選擇使用使用
OpDeprecation deprecation = 8;
// 對此運算方法OP做的一行可讀的描述。
string summary = 5;
// 更加具體的op描述解釋
string description = 6;
// 該操作可以參與哪些優化,以下都時標識是否可以進行某一種優化
// op是否可以互換進行,比如 ("op(a,b) == op(b,a)" for all inputs)
bool is_commutative = 18;
// 是否能進行賦值
bool is_aggregate = 16; // for things like add
// 是否有狀態依賴
bool is_stateful = 17; // for things like variables, queue
// 是否允許不初始化進行
bool allows_uninitialized_input = 19; // for Assign, etc.
};
ArgDef
定義節點輸入,輸出的結構
message ArgDef {
string name = 1;
// 人類可讀的描述。
string description = 2;
// 描述input/output的一個或多個張量的型別
DataType type = 3;
string type_attr = 4; // if specified, attr must have type "type"
string number_attr = 5; // if specified, attr must have type "int"
string type_list_attr = 6;
bool is_ref = 16;
};
AttrDef
定義屬性結構的具體實現
message AttrDef {
string name = 1;
string type = 2;
AttrValue default_value = 3;
string description = 4;
bool has_minimum = 5;
int64 minimum = 6;
AttrValue allowed_values = 7;
}
OpDeprecation
定義棄用結構的具體實現
message OpDeprecation {
// 第一個GRODDEF版本,其中OP是不允許的。
int32 version = 1;
// 解釋為什麼它被棄用,而用什麼來代替。
string explanation = 2;
};
案例
下面以Add運算為例子, 這個運算有2給輸入和1給輸出,輸入和輸出屬性都指定了屬性type_attr, 並且這個屬性的值為T。在OpDef中,必須要出現name,為T的屬性。
op{
name:"Add"
input_arg {
name:"x"
type_attr:"T"
}
input_arg {
name:"y"
type_attr:"T"
}
output_arg {
name:"z"
tpye_attr:"T"
}
attr {
name:"T"
type:"type"
allowed_values {
list {
type:DT_HALF
type:DT_FLOAF
}
}
}
}