1. 程式人生 > >tensorflow資料結構-MetaInfoDef

tensorflow資料結構-MetaInfoDef


計算圖結構

  1. MetaGraphDef(計算圖)

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
            }
        }
    }
}