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


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


斷言兩個結構以相同的方式嵌套。

用法

tf.nest.assert_same_structure(
    nest1, nest2, check_types=True, expand_composites=False
)

參數

  • nest1 一個原子或嵌套結構。
  • nest2 一個原子或嵌套結構。
  • check_types 如果True(默認)結構類型也被檢查,包括字典的鍵。如果設置為 False ,例如,如果對象的列表和元組具有相同的大小,它們將看起來相同。請注意,具有相同名稱和字段的命名元組始終被認為具有相同的淺層結構。如果兩個類型都是列表子類型,則它們也將被視為相同(這允許來自可跟蹤依賴項跟蹤的 "list" 和 "_ListWrapper" 比較相等)。 check_types=True 僅檢查 sub-structures 的類型。不檢查原子的類型。
  • expand_composites 如果為真,則複合張量(例如 tf.sparse.SparseTensortf.RaggedTensor)將擴展為它們的分量張量。

拋出

  • ValueError 如果兩個結構的原子數不同,或者兩個結構的嵌套方式不同。
  • TypeError 如果兩個結構在其任何子結構中的序列類型不同。僅當 check_typesTrue 時才有可能。

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

請注意,該方法不檢查結構內的原子類型。

例子:

  • 這些原子與原子的比較將通過:
tf.nest.assert_same_structure(1.5, tf.Variable(1, tf.uint32))
  tf.nest.assert_same_structure("abc", np.array([1, 2]))
  • 這些嵌套結構與嵌套結構的比較將通過:
structure1 = (((1, 2), 3), 4, (5, 6))
  structure2 = ((("foo1", "foo2"), "foo3"), "foo4", ("foo5", "foo6"))
  structure3 = [(("a", "b"), "c"), "d", ["e", "f"]]
  tf.nest.assert_same_structure(structure1, structure2)
  tf.nest.assert_same_structure(structure1, structure3, check_types=False)
import collections
  tf.nest.assert_same_structure(
      collections.namedtuple("bar", "a b")(1, 2),
      collections.namedtuple("foo", "a b")(2, 3),
      check_types=False)
tf.nest.assert_same_structure(
      collections.namedtuple("bar", "a b")(1, 2),
      { "a":1, "b":2 },
      check_types=False)
tf.nest.assert_same_structure(
      { "a":1, "b":2, "c":3 },
      { "c":6, "b":5, "a":4 })
ragged_tensor1 = tf.RaggedTensor.from_row_splits(
        values=[3, 1, 4, 1, 5, 9, 2, 6],
        row_splits=[0, 4, 4, 7, 8, 8])
  ragged_tensor2 = tf.RaggedTensor.from_row_splits(
        values=[3, 1, 4],
        row_splits=[0, 3])
  tf.nest.assert_same_structure(
        ragged_tensor1,
        ragged_tensor2,
        expand_composites=True)
  • 這些示例將引發異常:
tf.nest.assert_same_structure([0, 1], np.array([0, 1]))
    Traceback (most recent call last):
  
    ValueError:The two structures don't have the same nested structure
tf.nest.assert_same_structure(
        collections.namedtuple('bar', 'a b')(1, 2),
        collections.namedtuple('foo', 'a b')(2, 3))
    Traceback (most recent call last):
  
    TypeError:The two structures don't have the same nested structure

相關用法


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