tf.nest.flatten
| Просмотреть исходный код на GitHub |
Возвращает плоский список из заданной структуры.
tf.nest.flatten(
structure, expand_composites=False
)
Обратитесь к tf.nest для определения структуры.
Если структура является атомом, то возвращается список с одним элементом: [структура].
Это обратная функция к методу nest.pack_sequence_as, который принимает плоский список и упаковывает его обратно в структуру.
В случае экземпляров словарей последовательность состоит из значений, отсортированных по ключу для обеспечения детерминированного поведения. Это также верно для экземпляров 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 | Структура nest содержит или содержит словарь с несортируемыми ключами. |
© 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/flatten