TensorFlow官方文檔默認值和約束條件

默認值和約束條件

屬性可能有默認值, 一些類型的屬性可以有約束條件. 爲了定義一個有約束條件的屬性, 你可以使用下列的 <attr-type-expr> 形式:

艾伯特(http://www.aibbt.com/)國內第一家人工智能門戶

  • {'<string1>', '<string2>'}: 屬性值必須是一個字符串, 取值可以爲 <string1> 或 <string2>. 值的語法已經暗示了值的類型爲 string, 已經暗示了. 下述語句模擬了一個枚舉值:
REGISTER_OP("EnumExample")
      .Attr("e: {'apple', 'orange'}");
  • {<type1>, <type2>}: 值是 type 類型, 且必須爲 <type1> 或 <type2> 之一, 當然 <type1> 和 <type2> 必須都是有效的 tensor 類型. 你無須指定屬性的類型爲 type, 而是通過 {...} 語句給出一個類型列表. 例如, 在下面的例子裏, 屬性 t 的類型必須爲 int32float, 或 bool:
REGISTER_OP("RestrictedTypeExample")
      .Attr("t: {int32, float, bool}");
  • 這裏有一些常見類型約束條件的快捷方式:
    • numbertype: 限制類型爲數字類型, 即非 string 非 bool 的類型.
    • realnumbertype: 與 numbertype 區別是不支持複雜類型.
    • quantizedtype: 與 numbertype 區別是隻支持量化數值 (quantized number type).

這些類型的列表在 tensorflow/core/framework/types.h 文件中通過函數定義 (如 NumberTypes()). 本例中屬性 t 必須爲某種數字類型:

REGISTER_OP("NumberType")
        .Attr("t: numbertype");

對於這個 Op:

tf.number_type(t=tf.int32)  # 有效
tf.number_type(t=tf.bool)   # 無效
  • int >= <n>: 值必須是一個整數, 且取值大於等於 <n><n> 是一個自然數.

例如, 下列 Op 註冊操作指定了屬性 a 的取值至少爲 2.

REGISTER_OP("MinIntExample")
      .Attr("a: int >= 2");
  • list(<type>) >= <n>: 一個 <type> 類型列表, 列表長度必須大於等於 <n>.

例如, 下面的 Op 註冊操作指定屬性 a 是一個列表, 列表中的元素類型是 int32 或 float列表長度至少爲3.

REGISTER_OP("TypeListExample")
      .Attr("a: list({int32, float}) >= 3");

通過添加 = <default> 到約束條件末尾, 給一個屬性設置默認值 (使其在自動生成的代碼裏 變成可選屬性), 如下:

REGISTER_OP("AttrDefaultExample")
    .Attr("i: int = 0");

默認值支持的語法將在最終 GraphDef 定義的 protobuf 表示中被使用.http://www.aibbt.com/a/16370.html

下面是給所有類型賦予默認值的例子:

REGISTER_OP("AttrDefaultExampleForAllTypes")
   .Attr("s: string = 'foo'")
   .Attr("i: int = 0")
   .Attr("f: float = 1.0")
   .Attr("b: bool = true")
   .Attr("ty: type = DT_INT32")
   .Attr("sh: shape = { dim { size: 1 } dim { size: 2 } }")
   .Attr("te: tensor = { dtype: DT_INT32 int_val: 5 }")
   .Attr("l_empty: list(int) = []")
   .Attr("l_int: list(int) = [2, 3, 5, 7]");

請特別注意那些類型值裏面包含的 DT_* 名稱.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章