Spec-Zone.ru › TensorFlow 1.15

tf.contrib.graph_editor.SubGraphView

Представление подграфа на существующем tf.Graph.

tf.contrib.graph_editor.SubGraphView(
    inside_ops=(), passthrough_ts=()
)

Экземпляр этого класса — это представление подграфа на существующем tf.Graph. «Подграф» означает, что он может представлять часть всего tf.Graph. «Представление» означает, что он предоставляет только пассивное наблюдение и не выполняет действий над tf.Graph. Обратите внимание, что в данной документации термин «подграф» часто используется как синоним «представления подграфа».

Подграф содержит:

  • список входных тензоров, доступный через свойство inputs.
  • список выходных тензоров, доступный через свойство outputs.
  • и операции между ними, доступные через свойство «ops».

Подграф можно рассматривать как функцию F(i0, i1, ...) -> o0, o1, ... Это функция, которая принимает в качестве входных данных некоторые входные тензоры и возвращает в качестве выходных данных некоторые выходные тензоры. Вычисления, которые выполняет функция, закодированы в операциях подграфа.

Тензоры (входные или выходные) могут быть двух типов:

  • связанный: связанный тензор подключается по крайней мере к одной операции, содержащейся в подграфе. Пример — подграф, представляющий одну операцию и её входные и выходные данные: все входные и выходные тензоры операции являются «связанными».
  • проходящий: проходящий тензор не подключен ни к одной операции, содержащейся в подграфе. Пример — подграф, представляющий один тензор: этот тензор является проходящим. По умолчанию проходящий тензор присутствует как во входных, так и в выходных тензорах подграфа. Однако он может быть переназначен, чтобы появляться только как входной (или выходной).

Входные и выходные тензоры могут быть переназначены. Например, некоторые входные тензоры могут быть опущены. Например, подграф, представляющий операцию с двумя входами, может быть переназначен, чтобы принимать только один вход. Обратите внимание, что это никак не изменяет базовый tf.Graph (помните, что это представление). Это означает, что другой вход игнорируется или рассматривается как «заданный». Аналогия с функциями может быть расширена следующим образом: F(x,y) — исходная функция. Переназначение входов с [x, y] на [x] означает, что подграф теперь представляет функцию F_y(x) (y «задан»).

Выходные тензоры также могут быть переназначены. Например, некоторые выходные тензоры могут быть опущены. Другие выходные тензоры могут быть также дублированы. Как упоминалось ранее, это никак не изменяет базовый tf.Graph. Аналогия с функциями может быть расширена следующим образом: F(...)->x,y — исходная функция. Переназначение выходов с [x, y] на [y,y] означает, что подграф теперь представляет функцию M(F(...)), где M — функция M(a,b)->b,b.

Полезно описать ещё три типа тензоров:

  • внутренний: внутренний тензор соединяет операции, содержащиеся в подграфе. Пример — подграф, представляющий две операции A и B, соединённые последовательно: -> A -> B ->. Средняя стрелка — внутренний тензор.
  • фактический вход: входной тензор подграфа, независимо от того, указан ли он в «входах» или нет (скрытый).
  • фактический выход: выходной тензор подграфа, независимо от того, указан ли он в «выходах» или нет (скрытый).
  • скрытый вход: фактический вход, который был скрыт с помощью переназначения входов. Другими словами, скрытый вход — это не внутренний тензор, не указанный как входной тензор, и один из потребителей которого принадлежит подграфу.
  • скрытый выход: фактический выход, который был скрыт с помощью переназначения выходов. Другими словами, скрытый выход — это не внутренний тензор, не указанный как выходной тензор, и одна из генерирующих операций которого принадлежит подграфу.

Вот некоторые полезные гарантии относительно экземпляра SubGraphView:

  • входные (или выходные) тензоры не являются внутренними.
  • входные (или выходные) тензоры являются либо «связанными», либо «проходящими».
  • проходящие тензоры не подключены ни к одной операции подграфа.

Обратите внимание, что нет гарантии, что операция в подграфе вообще вносит вклад в его входы или выходы. Например, переназначение как входов, так и выходов на пустые списки создаст подграф, который всё ещё содержит все исходные операции. Однако функция remove_unused_ops может быть использована для создания нового представления подграфа, чьи операции подключены по крайней мере к одному из входных или выходных тензоров.

Экземпляр этого класса предназначен для лёгкого объекта, который не изменяется на месте пользователем. Вместо этого пользователь может создавать новые изменённые экземпляры данного подграфа. В этом смысле класс SubGraphView предназначен для использования как неизменяемый объект Python.

Типичная проблема при использовании представлений заключается в том, что они могут перестать синхронизироваться с данными, которые они наблюдают (в данном случае, tf.Graph). Пользователь должен гарантировать, что этого не происходит. Для безопасности рекомендуется, чтобы срок существования представлений подграфов был очень коротким. Один из способов достижения этого — использование подграфов внутри контекста Python «with make_sgv(...) as sgv:».

Для устранения проблемы несинхронизации некоторые функции получают право изменять подграф на месте. Это обычно относится к функциям манипулирования графами, которые, принимая в качестве аргументов некоторые подграфы, могут изменить базовый tf.Graph. Поскольку это изменение может сделать представление подграфа недействительным, эти функции могут изменять аргумент на месте, чтобы отразить изменения. Например, вызов функции swap_inputs(svg0, svg1) изменит svg0 и svg1 на месте, чтобы отразить тот факт, что их входы теперь поменяны местами.

Args
inside_ops объект, преобразуемый в список tf.Operation. Этот список определяет все операции в подграфе.
passthrough_ts объект, преобразуемый в список tf.Tensor. Этот список определяет все «проходящие» тензоры. Проходящий тензор — это тензор, который идёт напрямую от входа подграфа к его выходу, без промежуточных операций. Все тензоры, не являющиеся проходящими, будут проигнорированы.
Raises
TypeError если inside_ops нельзя преобразовать в список tf.Operation или если passthrough_ts нельзя преобразовать в список tf.Tensor.
Attributes
connected_inputs Связанные входные тензоры этого представления подграфа.
connected_outputs Связанные выходные тензоры этого представления подграфа.
graph Базовый tf.Graph.
inputs Входные тензоры этого представления подграфа.
ops Операции в этом представлении подграфа.
outputs Выходные тензоры этого представления подграфа.
passthroughs Проходящие тензоры, идущие непосредственно от входа к выходу.

Методы

consumers

Посмотреть исходный код

consumers()

Возвращает множество Python всех потребителей этого представления подграфа.

Потребитель представления подграфа — это tf.Operation, который является потребителем одного из выходных тензоров и не находится в подграфе.

Возвращает
Список tf.Operation, которые являются потребителями этого представления подграфа.

copy

Посмотреть исходный код

copy()

Возвращает копию самого себя.

Обратите внимание, что этот класс является «представлением», поэтому его копирование создаёт только другое представление и не копирует базовый фрагмент tf.Graph.

Возвращает
Новый экземпляр, идентичный исходному.

find_op_by_name

Посмотреть исходный код

find_op_by_name(
    op_name
)

Возвращает операцию с именем op_name.

Args
op_name имя для поиска
Возвращает
Операция с именем op_name.
Raises
ValueError если операция с данным именем не найдена.
AssertionError если имя найдено несколько раз.

input_index

Посмотреть исходный код

input_index(
    t
)

Находит индекс входного тензора, соответствующий заданному входному тензору t.

Args
t входной тензор этого представления подграфа.
Возвращает
Индекс в списке self.inputs.
Raises
Error если t не является входным тензором.

is_passthrough

Посмотреть исходный код

is_passthrough(
    t
)

Проверить, является ли тензор проходящим.

op

Просмотреть исходный код

op(
    op_id
)

Получить операцию по её индексу.

output_index

Просмотреть исходный код

output_index(
    t
)

Найти индекс вывода, соответствующий заданному тензору вывода t.

Аргументы
t тензор вывода этого представления подграфа.
Возвращаемое значение
Индекс в списке self.outputs.
Исключения
Error если t не является тензором вывода.

remap

Просмотреть исходный код

remap(
    new_input_indices=None, new_output_indices=None
)

Переназначить входы и выходы подграфа.

Обратите внимание, что это изменение только представления: лежащий в основе tf.Graph не затрагивается.

Аргументы
new_input_indices итерируемый набор целых чисел или tf.Tensors, представляющий отображение между старыми входами и новыми. Целые числа должны быть положительными и меньше числа старых входов. tf.Tensors должны принадлежать старому списку входов. Это отображение может быть неполным и не должно содержать повторов.
new_output_indices итерируемый набор целых чисел или tf.Tensors, представляющий отображение между старыми выходами и новыми. Целые числа должны быть положительными и меньше числа старых выходов. tf.Tensors должны принадлежать старому списку выходов. Это отображение может быть неполным и может содержать повторы.
Возвращаемое значение
Новый изменённый экземпляр исходного представления подграфа с переназначенными входами и выходами.

remap_default

Просмотреть исходный код

remap_default(
    remove_input_map=True, remove_output_map=True
)

Переназначить входы и/или выходы на стандартное отображение.

Аргументы
remove_input_map если True, карта входов сбрасывается на стандартную.
remove_output_map если True, карта выходов сбрасывается на стандартную.
Возвращаемое значение
Новый изменённый экземпляр исходного представления подграфа со сброшенной на стандартную карту входов и/или выходов.

remap_inputs

Просмотреть исходный код

remap_inputs(
    new_input_indices
)

Переназначить входы подграфа.

Если входы исходного подграфа — [t0, t1, t2], а переназначение — [2,0], будет создан новый экземпляр с входами [t2, t0].

Обратите внимание, что это изменение только представления: лежащий в основе tf.Graph не затрагивается.

Аргументы
new_input_indices итерируемый набор целых чисел или tf.Tensors, представляющий отображение между старыми входами и новыми. Целые числа должны быть положительными и меньше числа старых входов. tf.Tensors должны принадлежать старому списку входов. Это отображение может быть неполным и не должно содержать повторов.
Возвращаемое значение
Новый изменённый экземпляр исходного представления подграфа с переназначенными входами.

remap_outputs

Просмотреть исходный код

remap_outputs(
    new_output_indices
)

Переназначить выход подграфа.

Если выходы исходного подграфа — [t0, t1, t2], а переназначение — [1,1,0], будет создан новый экземпляр с выходами [t1, t1, t0].

Обратите внимание, что это изменение только представления: лежащий в основе tf.Graph не затрагивается.

Аргументы
new_output_indices итерируемый набор целых чисел или tf.Tensors, представляющий отображение между старыми выходами и новыми. Целые числа должны быть положительными и меньше числа старых выходов. tf.Tensors должны принадлежать старому списку выходов. Это отображение может быть неполным и может содержать повторы.
Возвращаемое значение
Новый изменённый экземпляр исходного представления подграфа с переназначенными выходами.

remap_outputs_make_unique

Просмотреть исходный код

remap_outputs_make_unique()

Переназначить выходы так, чтобы каждый тензор появлялся только один раз.

remap_outputs_to_consumers

Просмотреть исходный код

remap_outputs_to_consumers()

Переназначить выходы для соответствия количеству потребителей.

remove_unused_ops

Просмотреть исходный код

remove_unused_ops(
    control_inputs=True
)

Удалить неиспользуемые операции.

Аргументы
control_inputs если True, управляющие входы используются для обнаружения используемых операций.
Возвращаемое значение
Новое представление подграфа, содержащее только используемые операции.

__bool__

Просмотреть исходный код

__bool__()

Разрешает неявное преобразование в булево значение.

__enter__

Просмотреть исходный код

__enter__()

Разрешает использование Python-контекста для минимизации срока жизни представления подграфа.

Представление подграфа предназначено для лёгких и временных объектов. Короткий срок жизни поможет избежать проблемы "разсинхронизации", упомянутой ранее. По этой причине экземпляр SubGraphView может быть использован в контексте Python. Например:

from tensorflow.contrib import graph_editor as ge with ge.make_sgv(...) as sgv: print(sgv)

Возвращаемое значение
Само себя.

__exit__

Просмотреть исходный код

__exit__(
    exc_type, exc_value, traceback
)

__nonzero__

Просмотреть исходный код

__nonzero__()

Разрешает неявное преобразование в булево значение.

© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r1.15/api_docs/python/tf/contrib/graph_editor/SubGraphView

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API