tf.nest.flatten
Возвращает плоский список из заданной структуры.
tf.nest.flatten(
structure, expand_composites=False
)
Используется в ноутбуках
| Используется в руководстве | Используется в учебниках |
|---|---|
Обратитесь к tf.nest для определения структуры.
Если структура является атомом, возвращается список с одним элементом: [структура].
Это обратное к методу nest.pack_sequence_as, который принимает плоский список и переупаковывает его в структуру вложенного типа.
В случае экземпляров dict последовательность состоит из значений, отсортированных по ключу для обеспечения детерминированного поведения. Это также относится к экземплярам OrderedDict: порядок их последовательности игнорируется, вместо него используется порядок сортировки ключей. Такая же соглашение используется в nest.pack_sequence_as. Это позволяет корректно переупаковать словари и OrderedDict после их распаковки, а также позволяет распаковать OrderedDict и затем переупаковать его с помощью соответствующего обычного словаря или наоборот. Словари с несортируемыми ключами нельзя распаковать.
Пользователи не должны изменять какие-либо коллекции, используемые в nest, во время выполнения этой функции.
Примеры:
-
Python словарь (отсортированный по ключу):
dict = { "key3": "value3", "key1": "value1", "key2": "value2" } tf.nest.flatten(dict) ['value1', 'value2', 'value3'] -
Для вложенной кортежа Python:
tuple = ((1.0, 2.0), (3.0, 4.0, 5.0), 6.0) tf.nest.flatten(tuple) [1.0, 2.0, 3.0, 4.0, 5.0, 6.0] -
Для вложенного словаря словарей:
dict = { "key3": {"c": (1.0, 2.0), "a": (3.0)}, "key1": {"m": "val1", "g": "val2"} } tf.nest.flatten(dict) ['val2', 'val1', 3.0, 1.0, 2.0] -
Массив NumPy (не будет распакован):
array = np.array([[1, 2], [3, 4]]) tf.nest.flatten(array) [array([[1, 2], [3, 4]])] -
tf.Tensor(не будет распакован):tensor = tf.constant([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]]) tf.nest.flatten(tensor) [<tf.Tensor: shape=(3, 3), dtype=float32, numpy= array([[1., 2., 3.], [4., 5., 6.], [7., 8., 9.]], dtype=float32)>] tf.RaggedTensor: Это составной тензор, представление которого состоит из плоского списка 'значений' и списка 'row_splits', которые указывают, как разбить плоский список на разные строки. Для более подробной информации оtf.RaggedTensor, посетите https://www.tensorflow.org/api_docs/python/tf/RaggedTensor.
с expand_composites=False, мы просто возвращаем RaggedTensor как есть.
tensor = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2]]) tf.nest.flatten(tensor, expand_composites=False) [<tf.RaggedTensor [[3, 1, 4, 1], [], [5, 9, 2]]>]
с expand_composites=True, мы возвращаем компоненты тензоров, составляющие представление RaggedTensor (тензоры значений и row_splits)
tensor = tf.ragged.constant([[3, 1, 4, 1], [], [5, 9, 2]])
tf.nest.flatten(tensor, expand_composites=True)
[<tf.Tensor: shape=(7,), dtype=int32, numpy=array([3, 1, 4, 1, 5, 9, 2],
dtype=int32)>,
<tf.Tensor: shape=(4,), dtype=int64, numpy=array([0, 4, 4, 7])>]
| Аргументы | |
|---|---|
structure | атом или вложенная структура. Обратите внимание, что массивы NumPy считаются атомами и не распаковываются. |
expand_composites | Если True, то составные тензоры, такие как tf.sparse.SparseTensor и tf.RaggedTensor расширяются до составляющих их тензоров. |
| Возвращаемое значение | |
|---|---|
| Список Python, плоская версия входных данных. |
| Исключения | |
|---|---|
TypeError | Структура или содержит словарь с несортируемыми ключами. |
© 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/api_docs/python/tf/nest/flatten