tf.nest.pack_sequence_as
| Просмотреть исходный код на GitHub |
Возвращает заданную сплющенную последовательность, упакованную в заданную структуру.
tf.nest.pack_sequence_as(
structure, flat_sequence, expand_composites=False
)
Обратитесь к tf.nest для определения структуры.
Если structure является атомом, flat_sequence должна быть списком с одним элементом; в этом случае возвращаемое значение равно flat_sequence[0].
Если structure является или содержит экземпляр словаря, ключи будут отсортированы для упаковки сплющенной последовательности в детерминированном порядке. Это также верно для экземпляров OrderedDict: их порядок следования в последовательности игнорируется, используется порядок сортировки ключей. Та же соглашение используется в flatten. Это правильно упаковывает словари и OrderedDict после их сплющивания и также позволяет сплющить OrderedDict и затем упаковать его обратно с использованием соответствующего обычного словаря или наоборот. Словари с несортируемыми ключами не могут быть сплющены.
Примеры:
- Словарь 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: Это составной тензор, представление которого состоит из сплющенного списка «значений» и списка «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)>}
| Аргументы | |
|---|---|
structure | Вложенная структура, чья структура задаётся вложенными списками, кортежами и словарями. Примечание: массивы NumPy и строки считаются скалярами. |
flat_sequence | сплющенная последовательность для упаковки. |
expand_composites | Если True, то составные тензоры, такие как tf.sparse.SparseTensor и tf.RaggedTensor, расширяются до своих составляющих тензоров. |
| Возвращаемое значение | |
|---|---|
packed | flat_sequence преобразован в структуру с теми же вложенными элементами, что и structure. |
| Исключения | |
|---|---|
ValueError | Если flat_sequence и structure имеют разное количество атомов. |
TypeError | structure является или содержит словарь с несортируемыми ключами. |
© 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.9/api_docs/python/tf/nest/pack_sequence_as