當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python tf.nest.map_structure用法及代碼示例


通過將 func 應用於 structure 中的每個原子來創建新結構。

用法

tf.nest.map_structure(
    func, *structure, **kwargs
)

參數

  • func 接受與結構一樣多的參數的可調用對象。
  • *structure 原子或嵌套結構。
  • **kwargs 有效的關鍵字參數是:
    • check_types :如果設置為 True(默認),則結構中的迭代類型必須相同(例如 map_structure(func, [1], (1,)) 引發 TypeError 異常)。要允許這樣做,請將此參數設置為 False 。請注意,具有相同名稱和字段的命名元組始終被認為具有相同的淺層結構。
    • expand_composites :如果設置為 True ,則複合張量如 tf.sparse.SparseTensortf.RaggedTensor 將擴展為它們的分量張量。如果False(默認),則複合張量不展開。

返回

  • structure[0] 具有相同數量的新結構,其原子對應於 func(x[0], x[1], ...) 其中 x[i]structure[i] 中相應位置的原子。如果有不同的結構類型並且check_typesFalse,則將使用第一個結構的結構類型。

拋出

  • TypeError 如果 func 不可調用,或者結構不通過深度樹相互匹配。
  • ValueError 如果沒有提供結構或者結構在類型上不匹配。
  • ValueError 如果提供了錯誤的關鍵字參數。

有關結構的定義,請參閱tf.nest

應用 func(x[0], x[1], ...) 其中 x[i] 枚舉 structure[i] 中的所有原子。 structure 中的所有項目必須具有相同的數量,並且返回值將包含具有相同結構布局的結果。

例子:

  • 一個 Python 字典:
a = {"hello":24, "world":76}
tf.nest.map_structure(lambda p:p * 2, a)
{'hello':48, 'world':152}
  • 多個 Python 字典:
d1 = {"hello":24, "world":76}
d2 = {"hello":36, "world":14}
tf.nest.map_structure(lambda p1, p2:p1 + p2, d1, d2)
{'hello':60, 'world':90}
  • 一個 Python 列表:
a = [24, 76, "ab"]
tf.nest.map_structure(lambda p:p * 2, a)
[48, 152, 'abab']
  • 標量:
tf.nest.map_structure(lambda x, y:x + y, 3, 4)
7
  • 空結構:
tf.nest.map_structure(lambda x:x + 1, ())
()
  • 檢查可迭代的類型:
s1 = (((1, 2), 3), 4, (5, 6))
s1_list = [[[1, 2], 3], 4, [5, 6]]
tf.nest.map_structure(lambda x, y:None, s1, s1_list)
Traceback (most recent call last):

TypeError:The two structures don't have the same nested structure
  • 類型檢查設置為 False:
s1 = (((1, 2), 3), 4, (5, 6))
s1_list = [[[1, 2], 3], 4, [5, 6]]
tf.nest.map_structure(lambda x, y:None, s1, s1_list, check_types=False)
(((None, None), None), None, (None, None))

相關用法


注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.nest.map_structure。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。