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