tf.Graph
| Просмотреть исходный код на GitHub |
Вычисление TensorFlow, представленное как граф потока данных.
tf.Graph()
Графы используются tf.function для представления вычислений функции. Каждый граф содержит набор tf.Operation объектов, представляющих единицы вычисления; и tf.Tensor объекты, представляющие единицы данных, которые передаются между операциями.
Использование графов напрямую (устарело)
Можно создать и использовать tf.Graph напрямую без tf.function, как это требовалось в TensorFlow 1, но это устарело, и рекомендуется использовать tf.function вместо этого. Если граф используется напрямую, для выполнения графа также потребуются другие устаревшие классы TensorFlow 1, такие как tf.compat.v1.Session.
Можно зарегистрировать граф по умолчанию с помощью tf.Graph.as_default управляющего контекстом. Затем операции будут добавляться в граф вместо того, чтобы выполняться немедленно. Например:
g = tf.Graph() with g.as_default(): # Define operations and tensors in `g`. c = tf.constant(30.0) assert c.graph is g
tf.compat.v1.get_default_graph() можно использовать для получения графа по умолчанию.
Важное замечание: Этот класс не потокобезопасен для построения графов. Все операции должны создаваться из одного потока или должна предоставляться внешняя синхронизация. Если не указано иное, все методы не потокобезопасны.
Экземпляр Graph поддерживает произвольное количество «коллекций», которые идентифицируются по имени. Для удобства при построении большого графа коллекции могут хранить группы связанных объектов: например, tf.Variable использует коллекцию (с именем tf.GraphKeys.GLOBAL_VARIABLES) для всех переменных, которые создаются во время построения графа. Вызывающая сторона может определить дополнительные коллекции, указав новое имя.
| Атрибуты | |
|---|---|
building_function | Возвращает True, если этот граф представляет функцию. |
collections | Возвращает имена коллекций, известных этому графу. |
finalized | True, если этот граф был завершен. |
graph_def_versions | Информация о версии GraphDef этого графа. Для получения подробной информации о значении каждой версии, см. |
seed | Глобальное семя случайных чисел для этого графа. |
version | Возвращает номер версии, который увеличивается по мере добавления операций в граф. Обратите внимание, что это не связано с |
Методы
add_to_collection
add_to_collection(
name, value
)
Хранит value в коллекции с заданным name.
Обратите внимание, что коллекции не являются множествами, поэтому можно несколько раз добавить значение в коллекцию.
| Аргументы | |
|---|---|
name | Ключ для коллекции. Класс GraphKeys содержит много стандартных имен для коллекций. |
value | Значение для добавления в коллекцию. |
add_to_collections
add_to_collections(
names, value
)
Хранит value в коллекциях, заданных names.
Обратите внимание, что коллекции не являются множествами, поэтому можно несколько раз добавить значение в коллекцию. Эта функция гарантирует, что дубликаты в names игнорируются, но она не будет проверять предварительное членство value в какой-либо из коллекций в names.
names может быть любым итерируемым объектом, но если names является строкой, она рассматривается как имя единственной коллекции.
| Аргументы | |
|---|---|
names | Ключи коллекций, которые нужно добавить. Класс GraphKeys содержит много стандартных имен для коллекций. |
value | Значение для добавления в коллекции. |
as_default
as_default()
Возвращает управляющий контекст, который делает этот Graph графом по умолчанию.
Этот метод следует использовать, если вы хотите создать несколько графов в одном процессе. Для удобства предоставляется глобальный граф по умолчанию, и все операции будут добавлены в этот граф, если вы не создадите новый граф явно.
Используйте этот метод с ключевым словом with для указания того, что операции, созданные в пределах блока, должны быть добавлены в этот граф. В этом случае, после выхода из области with, предыдущий граф по умолчанию снова устанавливается как граф по умолчанию. Существует стек, поэтому вложенные вызовы as_default допустимы.
Граф по умолчанию является свойством текущего потока. Если вы создаете новый поток и хотите использовать граф по умолчанию в этом потоке, вы должны явно добавить with g.as_default(): в функцию этого потока.
Следующие примеры кода эквивалентны:
# 1. Using Graph.as_default(): g = tf.Graph() with g.as_default(): c = tf.constant(5.0) assert c.graph is g # 2. Constructing and making default: with tf.Graph().as_default() as g: c = tf.constant(5.0) assert c.graph is g
Если выполнение в режиме eager включено, операции, созданные в рамках этого контекстного менеджера, будут добавлены в граф вместо того, чтобы выполняться немедленно.
| Возвращает | |
|---|---|
| Управляющий контекст для использования этого графа в качестве графа по умолчанию. |
as_graph_def
as_graph_def(
from_version=None, add_shapes=False
)
Возвращает сериализованное представление GraphDef этого графа.
Сериализованное GraphDef можно импортировать в другой Graph (с помощью tf.import_graph_def) или использовать с API сеанса C++.
Этот метод потокобезопасен.
| Аргументы | |
|---|---|
from_version | Необязательно. Если это задано, возвращает GraphDef, содержащий только узлы, которые были добавлены в этот граф с момента того, как свойству version было присвоено заданное значение. |
add_shapes | Если true, добавляет атрибут «_output_shapes» в каждый узел со выведенными формами каждого из его выходных данных. |
| Возвращает | |
|---|---|
Протокол буфера GraphDef. |
| Возможные исключения | |
|---|---|
ValueError | Если graph_def будет слишком большим. |
as_graph_element
as_graph_element(
obj, allow_tensor=True, allow_operation=True
)
Возвращает объект, на который ссылается obj, как Operation или Tensor.
Эта функция проверяет, что obj представляет элемент этого графа, и выводит информативное сообщение об ошибке, если это не так.
Эта функция является стандартным способом получения/проверки объекта одного из разрешенных типов из внешней ссылки на аргумент в API сеанса.
Этот метод может вызываться одновременно из нескольких потоков.
| Аргументы | |
|---|---|
obj | Tensor, Operation, или имя тензора или операции. Также может быть любым объектом с методом _as_graph_element(), который возвращает значение одного из этих типов. Примечание: _as_graph_element будет вызвано внутри блокировки графа, поэтому не может изменять граф. |
allow_tensor | Если true, obj может ссылаться на Tensor. |
allow_operation | Если true, obj может ссылаться на Operation. |
| Возвращает | |
|---|---|
Tensor или Operation в графе, соответствующем obj. |
| Возможные исключения | |
|---|---|
TypeError | Если obj не является типом, для которого мы пытаемся преобразовать типы. |
ValueError | Если obj имеет соответствующий тип, но некорректен. Например, некорректная строка. |
KeyError | Если obj не является объектом в графе. |
clear_collection
clear_collection(
name
)
Очищает все значения в коллекции.
| Аргументы | |
|---|---|
name | Ключ коллекции. Класс GraphKeys содержит множество стандартных имен коллекций. |
colocate_with
@tf_contextlib.contextmanager
colocate_with(
op, ignore_existing=False
)
Возвращает менеджер контекста, который указывает операцию для совместного размещения.
Примечание: эта функция предназначена не для общего использования, а только для внутренних библиотек.
Например:
a = tf.Variable([1.0]) with g.colocate_with(a): b = tf.constant(1.0) c = tf.add(a, b)
b и c всегда будут размещены совместно с a, независимо от того, где a будет размещён в итоге.
Примечание: Использование области совместного размещения сбрасывает любые существующие ограничения устройства.
Если op равно None, то ignore_existing должно быть True, и новая область сбрасывает все ограничения совместного размещения и устройства.
| Аргументы | |
|---|---|
op | Операция, с которой необходимо разместить все создаваемые операции, или None. |
ignore_existing | Если True, применяется только совместное размещение этой операции в контексте, а не все свойства совместного размещения в стеке. Если op равно None, это значение должно быть True. |
| Исключения | |
|---|---|
ValueError | если op равно None, но ignore_existing равно False. |
| Возвращаемое значение | |
|---|---|
| Менеджер контекста, который указывает операцию для совместного размещения вновь созданных операций. |
container
@tf_contextlib.contextmanager
container(
container_name
)
Возвращает менеджер контекста, который задаёт контейнер ресурсов для использования.
Состоятельные операции, такие как переменные и очереди, могут сохранять своё состояние на устройствах, чтобы они могли быть совместно использованы несколькими процессами. Контейнер ресурсов — это строковое имя, под которым отслеживаются эти состоятельные операции. Эти ресурсы можно освободить или очистить с помощью tf.Session.reset().
Например:
with g.container('experiment0'):
# All stateful Operations constructed in this context will be placed
# in resource container "experiment0".
v1 = tf.Variable([1.0])
v2 = tf.Variable([2.0])
with g.container("experiment1"):
# All stateful Operations constructed in this context will be
# placed in resource container "experiment1".
v3 = tf.Variable([3.0])
q1 = tf.queue.FIFOQueue(10, tf.float32)
# All stateful Operations constructed in this context will be
# be created in the "experiment0".
v4 = tf.Variable([4.0])
q1 = tf.queue.FIFOQueue(20, tf.float32)
with g.container(""):
# All stateful Operations constructed in this context will be
# be placed in the default resource container.
v5 = tf.Variable([5.0])
q3 = tf.queue.FIFOQueue(30, tf.float32)
# Resets container "experiment0", after which the state of v1, v2, v4, q1
# will become undefined (such as uninitialized).
tf.Session.reset(target, ["experiment0"])
| Аргументы | |
|---|---|
container_name | Строка имени контейнера. |
| Возвращаемое значение | |
|---|---|
| Менеджер контекста для определения контейнеров ресурсов для состоятельных операций, возвращает имя контейнера. |
control_dependencies
control_dependencies(
control_inputs
)
Возвращает менеджер контекста, который указывает зависимости управления.
Используйте с ключевым словом with, чтобы указать, что все операции, созданные в контексте, должны иметь зависимости управления от control_inputs. Например:
with g.control_dependencies([a, b, c]): # `d` and `e` will only run after `a`, `b`, and `c` have executed. d = ... e = ...
Несколько вызовов control_dependencies() могут быть вложены, и в этом случае у новой Operation будут зависимости управления от объединения control_inputs из всех активных контекстов.
with g.control_dependencies([a, b]):
# Ops constructed here run after `a` and `b`.
with g.control_dependencies([c, d]):
# Ops constructed here run after `a`, `b`, `c`, and `d`.
Вы можете передать None, чтобы очистить зависимости управления:
with g.control_dependencies([a, b]):
# Ops constructed here run after `a` and `b`.
with g.control_dependencies(None):
# Ops constructed here run normally, not waiting for either `a` or `b`.
with g.control_dependencies([c, d]):
# Ops constructed here run after `c` and `d`, also not waiting
# for either `a` or `b`.
Примечание: Контекст зависимостей управления применяется только к операциям, которые созданы в контексте. Просто использование операции или тензора в контексте не добавляет зависимость управления. Следующий пример иллюстрирует этот момент:
# WRONG
def my_func(pred, tensor):
t = tf.matmul(tensor, tensor)
with tf.control_dependencies([pred]):
# The matmul op is created outside the context, so no control
# dependency will be added.
return t
# RIGHT
def my_func(pred, tensor):
with tf.control_dependencies([pred]):
# The matmul op is created in the context, so a control dependency
# will be added.
return tf.matmul(tensor, tensor)
Также обратите внимание, что хотя выполнение операций, созданных в этой области, вызовет выполнение зависимостей, созданные в этой области операции могут быть удалены из обычной графы TensorFlow. Например, в следующем фрагменте кода зависимости никогда не выполняются:
loss = model.loss()
with tf.control_dependencies(dependencies):
loss = loss + tf.constant(1) # note: dependencies ignored in the
# backward pass
return tf.gradients(loss, model.variables)
Это происходит потому, что оценка графа градиента не требует оценки операции константы(1), созданной в прямом проходе.
| Аргументы | |
|---|---|
control_inputs | Список объектов Operation или Tensor, которые должны быть выполнены или вычислены перед запуском операций, определённых в контексте. Также может быть None для очистки зависимостей управления. |
| Возвращаемое значение | |
|---|---|
| Менеджер контекста, который задаёт зависимости управления для всех операций, созданных в контексте. |
| Исключения | |
|---|---|
TypeError | Если control_inputs не является списком объектов Operation или Tensor. |
create_op
create_op(
op_type,
inputs,
dtypes=None,
input_types=None,
name=None,
attrs=None,
op_def=None,
compute_shapes=True,
compute_device=True
)
Создаёт операцию в этой графе. (устаревшие аргументы)
Это низкоуровневый интерфейс для создания операции. Большинство программ не вызывают этот метод напрямую, а вместо этого используют конструкторы операций Python, такие как tf.constant(), которые добавляют операции в стандартную графу.
| Аргументы | |
|---|---|
op_type | Тип операции, который необходимо создать. Соответствует полю OpDef.name для протокола, определяющего операцию. |
inputs | Список объектов Tensor, которые будут входными данными для операции Operation. |
dtypes | (Необязательно) Список объектов DType, которые будут типами тензоров, которые производит операция. |
input_types | (Необязательно.) Список DType типов тензоров, которые операция потребляет. По умолчанию использует базовый DType каждого входа в inputs. Операции, ожидающие входных данных ссылочного типа, должны явно указать input_types. |
name | (Необязательно.) Строковое имя операции. Если не указано, имя генерируется на основе op_type. |
attrs | (Необязательно.) Словарь, где ключ — это имя атрибута (строка), а значение — соответствующий атрибут attr протокола NodeDef (протокол AttrValue). |
op_def | (Необязательно.) Протокол OpDef, который описывает op_type операции. |
compute_shapes | (Необязательно.) Устарело. Не оказывает влияния (формы всегда вычисляются). |
compute_device | (Необязательно.) Если True, функции устройства будут выполнены для вычисления свойства устройства операции. |
| Исключения | |
|---|---|
TypeError | если любой из входов не является Tensor. |
ValueError | если конфликтуют совместное размещение и существующее назначение устройства. |
| Возвращаемое значение | |
|---|---|
Объект Operation . |
device
@tf_contextlib.contextmanager
device(
device_name_or_function
)
Возвращает менеджер контекста, который задаёт используемое по умолчанию устройство.
Аргумент device_name_or_function может быть строкой имени устройства, функцией устройства или None:
- Если это строка имени устройства, все операции, созданные в этом контексте, будут назначены устройству с этим именем, если не переопределены вложенным контекстом
device(). - Если это функция, она будет обрабатываться как функция от объектов Operation к строкам имён устройств и вызываться каждый раз при создании новой операции. Операция будет назначена устройству с возвращённым именем.
- Если это None, все вызовы
device()из окружающего контекста будут проигнорированы.
Для получения информации о допустимом синтаксисе строк имён устройств см. документацию в DeviceNameUtils.
Например:
with g.device('/device:GPU:0'):
# All operations constructed in this context will be placed
# on GPU 0.
with g.device(None):
# All operations constructed in this context will have no
# assigned device.
# Defines a function from `Operation` to device string.
def matmul_on_gpu(n):
if n.type == "MatMul":
return "/device:GPU:0"
else:
return "/cpu:0"
with g.device(matmul_on_gpu):
# All operations of type "MatMul" constructed in this context
# will be placed on GPU 0; all other operations will be placed
# on CPU 0.
Примечание: Область устройства может быть переопределена оболочками операций или другим кодом библиотеки. Например, операция присваивания переменнойv.assign()должна быть совместно размещена сtf.Variablev, и несовместимые области устройств будут проигнорированы.
| Аргументы | |
|---|---|
device_name_or_function | Имя устройства или функция, используемая в контексте. |
| Возвращает | |
|---|---|
| Менеджер контекста, который определяет устройство по умолчанию для использования в вновь созданных операциях. |
| Исключения | |
|---|---|
RuntimeError | Если области устройств не вложены должным образом. |
finalize
finalize()
Завершает эту графу, делая её только для чтения.
После вызова g.finalize(), новые операции не могут быть добавлены в g. Этот метод используется для обеспечения того, что в графу не добавляются операции, когда она используется несколькими потоками, например, при использовании tf.compat.v1.train.QueueRunner.
get_all_collection_keys
get_all_collection_keys()
Возвращает список коллекций, используемых в этой графе.
get_collection
get_collection(
name, scope=None
)
Возвращает список значений в коллекции с заданным name.
Это отличается от get_collection_ref(), которое всегда возвращает фактический список коллекций, так как оно возвращает новый список каждый раз, когда вызывается.
| Аргументы | |
|---|---|
name | Ключ для коллекции. Например, класс GraphKeys содержит много стандартных имён для коллекций. |
scope | (Необязательно.) Строка. Если она предоставлена, результирующий список фильтруется, включая только элементы, чьё атрибут name соответствует scope с использованием re.match. Элементы без атрибута name никогда не возвращаются, если указан scope. Выбор re.match означает, что scope без специальных маркеров фильтрует по префиксу. |
| Возвращает | |
|---|---|
Список значений в коллекции с заданным name, или пустой список, если в эту коллекцию не было добавлено ни одного значения. Список содержит значения в порядке их сбора. |
get_collection_ref
get_collection_ref(
name
)
Возвращает список значений в коллекции с заданным name.
Если коллекция существует, она возвращает сам список, который можно изменить на месте для изменения коллекции. Если коллекция не существует, она создаётся как пустой список и список возвращается.
Это отличается от get_collection(), которое всегда возвращает копию списка коллекции, если она существует, и никогда не создаёт пустую коллекцию.
| Аргументы | |
|---|---|
name | Ключ для коллекции. Например, класс GraphKeys содержит много стандартных имён для коллекций. |
| Возвращает | |
|---|---|
Список значений в коллекции с заданным name, или пустой список, если в эту коллекцию не было добавлено ни одного значения. |
get_name_scope
get_name_scope()
Возвращает текущую область имён.
Например:
with tf.name_scope('scope1'):
with tf.name_scope('scope2'):
print(tf.compat.v1.get_default_graph().get_name_scope())
выведет строку scope1/scope2.
| Возвращает | |
|---|---|
| Строка, представляющая текущую область имён. |
get_operation_by_name
get_operation_by_name(
name
)
Возвращает операцию с заданным именем.
Этот метод может вызываться одновременно из нескольких потоков.
| Аргументы | |
|---|---|
name | Имя возвращаемой операции. |
| Возвращает | |
|---|---|
| Операция с заданным именем. |
| Исключения | |
|---|---|
TypeError | Если name не является строкой. |
KeyError | Если name не соответствует операции в этой графе. |
get_operations
get_operations()
Возвращает список операций в графе.
Вы можете изменять операции на месте, но изменения в списке, такие как вставки/удаления, не влияют на список операций, известных графе.
Этот метод может вызываться одновременно из нескольких потоков.
| Возвращает | |
|---|---|
| Список операций. |
get_tensor_by_name
get_tensor_by_name(
name
)
Возвращает тензор с заданным именем.
Этот метод может вызываться одновременно из нескольких потоков.
| Аргументы | |
|---|---|
name | Имя возвращаемого тензора. |
| Возвращает | |
|---|---|
| Тензор с заданным именем. |
| Исключения | |
|---|---|
TypeError | Если name не является строкой. |
KeyError | Если name не соответствует тензору в этой графе. |
gradient_override_map
@tf_contextlib.contextmanager
gradient_override_map(
op_type_map
)
ЭКСПЕРИМЕНТАЛЬНО: Менеджер контекста для переопределения функций градиента.
Этот менеджер контекста может использоваться для переопределения функции градиента, которая будет использоваться для операций в рамках области контекста.
Например:
@tf.RegisterGradient("CustomSquare")
def _custom_square_grad(op, grad):
# ...
with tf.Graph().as_default() as g:
c = tf.constant(5.0)
s_1 = tf.square(c) # Uses the default gradient for tf.square.
with g.gradient_override_map({"Square": "CustomSquare"}):
s_2 = tf.square(s_2) # Uses _custom_square_grad to compute the
# gradient of s_2.
| Аргументы | |
|---|---|
op_type_map | Словарь, сопоставляющий строки типов операций с альтернативными строками типов операций. |
| Возвращает | |
|---|---|
| Менеджер контекста, который устанавливает альтернативный тип операции, который будет использоваться для одной или нескольких операций, созданных в этом контексте. |
| Исключения | |
|---|---|
TypeError | Если op_type_map не является словарем, сопоставляющим строки со строками. |
is_feedable
is_feedable(
tensor
)
Возвращает True, если и только если tensor является пригодным для подачи.
is_fetchable
is_fetchable(
tensor_or_op
)
Возвращает True, если и только если tensor_or_op извлекаемый.
name_scope
@tf_contextlib.contextmanager
name_scope(
name
)
Возвращает менеджер контекста, который создаёт иерархические имена для операций.
Граф поддерживает стек областей имён. Утверждение with name_scope(...): помещает новое имя в стек на всё время существования контекста.
Аргумент name будет интерпретирован следующим образом:
- Строка (не заканчивающаяся на '/') создаст новую область имен, в которой
nameдобавляется к префиксу всех операций, созданных в контексте. Еслиnameбыла использована ранее, она будет сделана уникальной путём вызоваself.unique_name(name). - Область, ранее захваченная из оператора
with g.name_scope(...) as scope:, будет обрабатываться как "абсолютная" область имен, что позволяет повторно войти в существующие области. - Значение
Noneили пустая строка сбросят текущую область имен до глобальной (пустой) области имен.
Например:
with tf.Graph().as_default() as g:
c = tf.constant(5.0, name="c")
assert c.op.name == "c"
c_1 = tf.constant(6.0, name="c")
assert c_1.op.name == "c_1"
# Creates a scope called "nested"
with g.name_scope("nested") as scope:
nested_c = tf.constant(10.0, name="c")
assert nested_c.op.name == "nested/c"
# Creates a nested scope called "inner".
with g.name_scope("inner"):
nested_inner_c = tf.constant(20.0, name="c")
assert nested_inner_c.op.name == "nested/inner/c"
# Create a nested scope called "inner_1".
with g.name_scope("inner"):
nested_inner_1_c = tf.constant(30.0, name="c")
assert nested_inner_1_c.op.name == "nested/inner_1/c"
# Treats `scope` as an absolute name scope, and
# switches to the "nested/" scope.
with g.name_scope(scope):
nested_d = tf.constant(40.0, name="d")
assert nested_d.op.name == "nested/d"
with g.name_scope(""):
e = tf.constant(50.0, name="e")
assert e.op.name == "e"
Само имя области можно захватить с помощью with g.name_scope(...) as scope:, которое сохраняет имя области в переменной scope. Это значение может быть использовано для именования операции, представляющей собой общий результат выполнения операций в области. Например:
inputs = tf.constant(...)
with g.name_scope('my_layer') as scope:
weights = tf.Variable(..., name="weights")
biases = tf.Variable(..., name="biases")
affine = tf.matmul(inputs, weights) + biases
output = tf.nn.relu(affine, name=scope)
Примечание: Данный конструктор проверяет предоставленное name. Действительные имена областей соответствуют одному из следующих регулярных выражений:
[A-Za-z0-9.][A-Za-z0-9_.\-/]* (for scopes at the root) [A-Za-z0-9_.\-/]* (for other scopes)
| Аргументы | |
|---|---|
name | Имя области. |
| Возвращает | |
|---|---|
Менеджер контекста, который устанавливает name в качестве новой области имен. |
| Возможные исключения | |
|---|---|
ValueError | Если name не является допустимым именем области, согласно правилам выше. |
prevent_feeding
prevent_feeding(
tensor
)
Помечает данную tensor как неподдерживаемую для подкачки в этом графе.
prevent_fetching
prevent_fetching(
op
)
Помечает данную op как неподдерживаемую для извлечения в этом графе.
switch_to_thread_local
switch_to_thread_local()
Делает стеки устройств, совместного размещения и зависимостей локальными для потоков.
Стеки устройств, совместного размещения и зависимостей по умолчанию не являются локальными для потоков. Если к ним обращаются несколько потоков, состояние общего. Это означает, что один поток может повлиять на поведение другого потока.
После вызова этого метода стеки становятся локальными для потоков. Если к ним обращаются несколько потоков, состояние не общее. Каждый поток использует своё значение; поток не влияет на другие потоки, изменяя такой стек.
Начальное значение для стека каждого потока устанавливается в текущее значение стека при первом вызове switch_to_thread_local().
unique_name
unique_name(
name, mark_as_used=True
)
Возвращает уникальное имя операции для name.
Примечание: Вам редко нужно вызыватьunique_name()напрямую. В большинстве случаев вам достаточно создать блокиwith g.name_scope()для генерации структурированных имён.
unique_name используется для генерации структурированных имён, разделённых "/", чтобы помочь идентифицировать операции при отладке графа. Имена операций отображаются в сообщениях об ошибках, отправляемых временем выполнения TensorFlow, а также в различных инструментах визуализации, таких как TensorBoard.
Если mark_as_used установлено в значение True, которое является значением по умолчанию, создаётся и помечается как используемое новое уникальное имя. Если установлено в значение False, уникальное имя возвращается без фактического помечания как используемого. Это полезно, когда вызывающий просто хочет узнать, каким будет создаваемое имя.
| Аргументы | |
|---|---|
name | Имя операции. |
mark_as_used | Необходимо ли помечать это имя как используемое. |
| Возвращает | |
|---|---|
Строка, которая будет передана в create_op(), которая будет использована для именования создаваемой операции. |
© 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/Graph