返回打包到給定結構中的給定展平序列。
用法
tf.nest.pack_sequence_as(
structure, flat_sequence, expand_composites=False
)
參數
-
structure
嵌套結構,其結構由嵌套列表、元組和字典給出。注意:numpy 數組和字符串被認為是標量。 -
flat_sequence
要打包的扁平序列。 -
expand_composites
如果為真,則複合張量(例如tf.sparse.SparseTensor
和tf.RaggedTensor
)將擴展為它們的分量張量。
返回
-
packed
flat_sequence
轉換為具有與structure
相同的遞歸結構。
拋出
-
ValueError
如果flat_sequence
和structure
具有不同的原子數。 -
TypeError
structure
是或包含帶有不可排序鍵的字典。
有關結構的定義,請參閱tf.nest。
如果structure
是一個原子,flat_sequence
必須是一個single-item列表;在這種情況下,返回值為 flat_sequence[0]
。
如果 structure
是或包含 dict 實例,則將對鍵進行排序以按確定順序打包平麵序列。對於OrderedDict
實例也是如此:它們的序列順序被忽略,而是使用鍵的排序順序。 flatten
遵循相同的約定。這會在 dicts 和 OrderedDict
被展平後正確地重新打包它們,並且還允許展平 OrderedDict
然後使用相應的普通 dict 將其重新打包,反之亦然。具有不可排序鍵的字典不能被展平。
例子:
- Python字典:
structure = { "key3":"", "key1":"", "key2":"" }
flat_sequence = ["value1", "value2", "value3"]
tf.nest.pack_sequence_as(structure, flat_sequence)
{'key3':'value3', 'key1':'value1', 'key2':'value2'}
- 對於嵌套的 python 元組:
structure = (('a','b'), ('c','d','e'), 'f')
flat_sequence = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0]
tf.nest.pack_sequence_as(structure, flat_sequence)
((1.0, 2.0), (3.0, 4.0, 5.0), 6.0)
- 對於字典的嵌套字典:
structure = { "key3":{"c":('alpha', 'beta'), "a":('gamma')},
"key1":{"e":"val1", "d":"val2"} }
flat_sequence = ['val2', 'val1', 3.0, 1.0, 2.0]
tf.nest.pack_sequence_as(structure, flat_sequence)
{'key3':{'c':(1.0, 2.0), 'a':3.0}, 'key1':{'e':'val1', 'd':'val2'} }
- Numpy 數組(視為標量):
structure = ['a']
flat_sequence = [np.array([[1, 2], [3, 4]])]
tf.nest.pack_sequence_as(structure, flat_sequence)
[array([[1, 2],
[3, 4]])]
- tf.Tensor(視為標量):
structure = ['a']
flat_sequence = [tf.constant([[1., 2., 3.], [4., 5., 6.]])]
tf.nest.pack_sequence_as(structure, flat_sequence)
[<tf.Tensor:shape=(2, 3), dtype=float32,
numpy= array([[1., 2., 3.], [4., 5., 6.]], dtype=float32)>]
tf.RaggedTensor
:這是一個複合張量,它的表示由 'values' 的扁平化列表和 'row_splits' 的列表組成,它們指示如何將扁平化列表分割成不同的行。有關tf.RaggedTensor
的更多詳細信息,請訪問 https://www.tensorflow.org/api_docs/python/tf/RaggedTensor。
使用 expand_composites=False
,我們將 RaggedTensor 視為標量。
structure = { "foo":tf.ragged.constant([[1, 2], [3]]),
"bar":tf.constant([[5]]) }
flat_sequence = [ "one", "two" ]
tf.nest.pack_sequence_as(structure, flat_sequence,
expand_composites=False)
{'foo':'two', 'bar':'one'}
對於 expand_composites=True
,我們期望扁平化的輸入包含構成參差不齊的張量的張量,即值和 row_splits 張量。
structure = { "foo":tf.ragged.constant([[1., 2.], [3.]]),
"bar":tf.constant([[5.]]) }
tensors = tf.nest.flatten(structure, expand_composites=True)
print(tensors)
[<tf.Tensor:shape=(1, 1), dtype=float32, numpy=array([[5.]],
dtype=float32)>,
<tf.Tensor:shape=(3,), dtype=float32, numpy=array([1., 2., 3.],
dtype=float32)>,
<tf.Tensor:shape=(3,), dtype=int64, numpy=array([0, 2, 3])>]
verified_tensors = [tf.debugging.check_numerics(t, 'invalid tensor:')
if t.dtype==tf.float32 else t
for t in tensors]
tf.nest.pack_sequence_as(structure, verified_tensors,
expand_composites=True)
{'foo':<tf.RaggedTensor [[1.0, 2.0], [3.0]]>,
'bar':<tf.Tensor:shape=(1, 1), dtype=float32, numpy=array([[5.]],
dtype=float32)>}
相關用法
- Python tf.nest.is_nested用法及代碼示例
- Python tf.nest.assert_same_structure用法及代碼示例
- Python tf.nest.map_structure用法及代碼示例
- Python tf.nest.flatten用法及代碼示例
- Python tf.nn.embedding_lookup_sparse用法及代碼示例
- Python tf.nn.RNNCellResidualWrapper.set_weights用法及代碼示例
- Python tf.nn.dropout用法及代碼示例
- Python tf.nn.gelu用法及代碼示例
- Python tf.nn.RNNCellDeviceWrapper.set_weights用法及代碼示例
- Python tf.no_gradient用法及代碼示例
- Python tf.nn.embedding_lookup用法及代碼示例
- Python tf.numpy_function用法及代碼示例
- Python tf.nn.RNNCellDeviceWrapper.get_weights用法及代碼示例
- Python tf.nn.local_response_normalization用法及代碼示例
- Python tf.nn.scale_regularization_loss用法及代碼示例
- Python tf.nn.RNNCellResidualWrapper.add_loss用法及代碼示例
- Python tf.nn.max_pool用法及代碼示例
- Python tf.nn.RNNCellDropoutWrapper.set_weights用法及代碼示例
- Python tf.nn.l2_loss用法及代碼示例
- Python tf.nn.log_softmax用法及代碼示例
注:本文由純淨天空篩選整理自tensorflow.org大神的英文原創作品 tf.nest.pack_sequence_as。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。