tf.compat.v1.Session
Класс для выполнения операций TensorFlow.
tf.compat.v1.Session(
target='', graph=None, config=None
)
Переход к TF2
Session не работает ни с выполнением в режиме eager, ни с tf.function, и вы не должны вызывать его напрямую. Чтобы мигрировать код, использующий сессии, в TF2, перепишите код без него. См. руководство по миграции по замене вызовов Session.run.
Описание
Используется в блокнотах
| Используется в руководстве | Используется в учебниках |
|---|---|
Объект Session encapsulates the environment in which Operation objects are executed, and Tensor objects are evaluated. Например:
tf.compat.v1.disable_eager_execution() # need to disable eager in TF2.x # Build a graph. a = tf.constant(5.0) b = tf.constant(6.0) c = a * b # Launch the graph in a session. sess = tf.compat.v1.Session() # Evaluate the tensor `c`. print(sess.run(c)) # prints 30.0
Сессия может владеть ресурсами, такими как tf.Variable, tf.queue.QueueBase и tf.compat.v1.ReaderBase. Важно освобождать эти ресурсы, когда они больше не нужны. Для этого вызовите метод tf.Session.close в сессии или используйте сессию в качестве менеджера контекста. Два следующих примера эквивалентны:
# Using the `close()` method. sess = tf.compat.v1.Session() sess.run(...) sess.close() # Using the context manager. with tf.compat.v1.Session() as sess: sess.run(...)
Протокол ConfigProto предоставляет различные параметры конфигурации для сессии. Например, чтобы создать сессию, использующую мягкие ограничения для размещения устройств и регистрировать полученные решения о размещении, создайте сессию следующим образом:
# Launch the graph in a session that allows soft device placement and
# logs the placement decisions.
sess = tf.compat.v1.Session(config=tf.compat.v1.ConfigProto(
allow_soft_placement=True,
log_device_placement=True))
| Аргументы | |
|---|---|
target | (Необязательно.) Движок выполнения для подключения. По умолчанию используется внутренний движок. См. Распределенный TensorFlow для получения дополнительных примеров. |
graph | (Необязательно.) Запускаемый Graph (описанный выше). |
config | (Необязательно.) Протокол ConfigProto с параметрами конфигурации для сессии. |
| Атрибуты | |
|---|---|
graph | Граф, запущенный в этой сессии. |
graph_def | Сериализуемая версия базового графа TensorFlow. |
sess_str | Процесс TensorFlow, к которому будет подключена эта сессия. |
Методы
as_default
as_default()
Возвращает менеджер контекста, делающий этот объект стандартной сессией.
Используется с ключевым словом with, чтобы указать, что вызовы tf.Operation.run или tf.Tensor.eval должны выполняться в этой сессии.
c = tf.constant(..) sess = tf.compat.v1.Session() with sess.as_default(): assert tf.compat.v1.get_default_session() is sess print(c.eval())
Чтобы получить текущую стандартную сессию, используйте tf.compat.v1.get_default_session.
Примечание: Менеджер контекста as_default не закрывает сессию при выходе из контекста, и вам необходимо явно закрыть сессию.
c = tf.constant(...) sess = tf.compat.v1.Session() with sess.as_default(): print(c.eval()) # ... with sess.as_default(): print(c.eval()) sess.close()
В качестве альтернативы можно использовать with tf.compat.v1.Session(): для создания сессии, которая автоматически закрывается при выходе из контекста, включая ситуации с необработанными исключениями.
Примечание: Стандартная сессия — это свойство текущей нити. Если вы создаете новую нить и хотите использовать стандартную сессию в этой нити, вы должны явно добавить with sess.as_default(): в функцию этой нити.
Примечание: Вход в блокwith sess.as_default():не влияет на текущий стандартный граф. Если вы используете несколько графиков, иsess.graphотличается от значенияtf.compat.v1.get_default_graph, вы должны явно войти в блокwith sess.graph.as_default():, чтобы сделатьsess.graphстандартным графом.
| Возвращает | |
|---|---|
| Менеджер контекста, использующий эту сессию в качестве стандартной сессии. |
close
close()
Закрывает эту сессию.
Вызов этого метода освобождает все ресурсы, связанные с сессией.
| Возможные исключения | |
|---|---|
tf.errors.OpError | Или один из его подклассов, если при закрытии сессии TensorFlow произошла ошибка. |
list_devices
list_devices()
Отображает доступные устройства в этой сессии.
devices = sess.list_devices() for d in devices: print(d.name)
| Где | |
|---|---|
| Каждый элемент в списке имеет следующие свойства | |
name | Строка с полным именем устройства. Пример: /job:worker/replica:0/task:3/device:CPU:0 |
device_type | Тип устройства (например, CPU, GPU, TPU). |
memory_limit | Максимальный объем памяти, доступный на устройстве. Примечание: в зависимости от устройства, используемая память может быть значительно меньше. |
| Возможные исключения | |
|---|---|
tf.errors.OpError | Если возникнет ошибка (например, сессия находится в недопустимом состоянии или возникают сетевые ошибки). |
| Возвращает | |
|---|---|
| Список устройств в сессии. |
make_callable
make_callable(
fetches, feed_list=None, accept_options=False
)
Возвращает вызываемый объект Python, выполняющий определенный шаг.
Возвращаемая вызываемая функция будет принимать len(feed_list) аргументов, типы которых должны быть совместимы со значениями данных для соответствующих элементов feed_list. Например, если элемент i в feed_list — это tf.Tensor, то i-й аргумент возвращаемой вызываемой функции должен быть объектом numpy ndarray (или чем-то, что преобразуется в ndarray) с соответствующим типом элемента и формой. Подробности о допустимых типах ключей и значений для передачи см. в tf.Session.run.
Возвращаемая вызываемая функция будет иметь тот же тип возвращаемого значения, что и tf.Session.run(fetches, ...). Например, если fetches — это tf.Tensor, вызываемая функция вернёт объект numpy ndarray; если fetches — это tf.Operation, она вернёт None.
| Аргументы | |
|---|---|
fetches | Значение или список значений для извлечения. Подробности о допустимых типах извлечения см. в tf.Session.run. |
feed_list | (Необязательно.) Список ключей feed_dict. Подробности о допустимых типах ключей передачи см. в tf.Session.run. |
accept_options | (Необязательно.) Если True, возвращаемая функция Callable сможет принимать tf.compat.v1.RunOptions и tf.compat.v1.RunMetadata в качестве необязательных ключевых аргументов options и run_metadata соответственно, с тем же синтаксисом и семантикой, что и tf.Session.run. Это полезно в некоторых случаях (профилирование и отладка), но приведёт к измеримому замедлению производительности Callable. По умолчанию: False. |
| Возвращаемое значение | |
|---|---|
Функция, которая при вызове выполнит шаг, определённый feed_list и fetches в этой сессии. |
| Исключения | |
|---|---|
TypeError | Если fetches или feed_list не могут быть интерпретированы как аргументы для tf.Session.run. |
partial_run
partial_run(
handle, fetches, feed_dict=None
)
Продолжает выполнение с дополнительными данными и результатами. (устарело)
Примечание: Эта функция устарела, и мы не ожидаем добавления к ней новой функциональности. Пожалуйста, не делайте зависимость своего кода от этой функции.
Это ЭКСПЕРИМЕНТАЛЬНО и может быть изменено.
Для использования частичного выполнения пользователь сначала вызывает partial_run_setup(), а затем последовательность partial_run(). partial_run_setup определяет список данных и результатов, которые будут использоваться в последующих вызовах partial_run.
Необязательный аргумент feed_dict позволяет вызывающей стороне переопределить значение тензоров в графе. Подробнее см. в run().
Ниже приведен простой пример:
a = array_ops.placeholder(dtypes.float32, shape=[])
b = array_ops.placeholder(dtypes.float32, shape=[])
c = array_ops.placeholder(dtypes.float32, shape=[])
r1 = math_ops.add(a, b)
r2 = math_ops.multiply(r1, c)
h = sess.partial_run_setup([r1, r2], [a, b, c])
res = sess.partial_run(h, r1, feed_dict={a: 1, b: 2})
res = sess.partial_run(h, r2, feed_dict={c: res})
| Аргументы | |
|---|---|
handle | Детектор последовательности частичных запусков. |
fetches | Один элемент графа, список элементов графа или словарь, значениями которого являются элементы или списки элементов графа (см. документацию по run). |
feed_dict | Словарь, сопоставляющий элементы графа со значениями (описано выше). |
| Возвращаемое значение | |
|---|---|
Либо одно значение, если fetches — это один элемент графа, или список значений, если fetches — список, или словарь с теми же ключами, что и fetches, если это словарь (см. документацию по run). |
| Исключения | |
|---|---|
tf.errors.OpError | Или один из его подклассов при ошибке. |
partial_run_setup
partial_run_setup(
fetches, feeds=None
)
Настраивает граф с данными и результатами для частичного выполнения. (устарело)
Примечание: Эта функция устарела, и мы не ожидаем добавления к ней новой функциональности. Пожалуйста, не делайте зависимость своего кода от этой функции.
Это ЭКСПЕРИМЕНТАЛЬНО и может быть изменено.
Обратите внимание, что в отличие от run, feeds определяет только элементы графа. Тензоры будут предоставлены последующими вызовами partial_run.
| Аргументы | |
|---|---|
fetches | Один элемент графа или список элементов графа. |
feeds | Один элемент графа или список элементов графа. |
| Возвращаемое значение | |
|---|---|
| Детектор частичного выполнения. |
| Исключения | |
|---|---|
RuntimeError | Если этот Session находится в недопустимом состоянии (например, закрыт). |
TypeError | Если ключи fetches или feed_dict имеют неподходящий тип. |
tf.errors.OpError | Или один из его подклассов, если произошла ошибка TensorFlow. |
reset
@staticmethod
reset(
target, containers=None, config=None
)
Сбрасывает контейнеры ресурсов в target и закрывает все подключённые сессии.
Контейнер ресурсов распределён по всем рабочим узлам в том же кластере, что и target. При сбросе контейнера ресурсов на target ресурсы, связанные с этим контейнером, будут очищены. В частности, все переменные в контейнере станут неопределёнными: они потеряют свои значения и формы.
ПРИМЕЧАНИЕ:
(i) reset() в настоящее время реализован только для распределённых сессий. (ii) Любые сессии на главном узле, указанном в target, будут закрыты.
Если не предоставлены контейнеры ресурсов, все контейнеры сбрасываются.
| Аргументы | |
|---|---|
target | Движок выполнения, к которому следует подключиться. |
containers | Список имен строк контейнеров ресурсов или None, если необходимо сбросить все контейнеры. |
config | (Необязательно.) Протокольный буфер с параметрами конфигурации. |
| Исключения | |
|---|---|
tf.errors.OpError | Или один из его подклассов, если произошла ошибка при сбросе контейнеров. |
run
run(
fetches, feed_dict=None, options=None, run_metadata=None
)
Выполняет операции и вычисляет тензоры в fetches.
Этот метод выполняет один шаг вычислений TensorFlow, выполняя необходимый фрагмент графа для выполнения каждой Operation и вычисления каждого Tensor в fetches, подставляя значения в feed_dict для соответствующих входных значений.
Аргумент fetches может быть отдельным элементом графа или произвольно вложенным списком, кортежем, namedtuple, словарем или OrderedDict, содержащим элементы графа на его листьях. Элемент графа может быть одного из следующих типов:
tf.Operation. Соответствующее возвращаемое значение будетNone.tf.Tensor. Соответствующее возвращаемое значение будет объектом numpy ndarray, содержащим значение этого тензора.tf.sparse.SparseTensor. Соответствующее возвращаемое значение будетtf.compat.v1.SparseTensorValue, содержащим значение этого разреженного тензора.get_tensor_handleоперация. Соответствующее возвращаемое значение будет объектом numpy ndarray, содержащим дескриптор этого тензора.string, которое является именем тензора или операции в графе.
Возвращаемое значение run() имеет ту же структуру, что и аргумент fetches, где листья заменены соответствующими значениями, возвращёнными TensorFlow.
Пример:
a = tf.constant([10, 20])
b = tf.constant([1.0, 2.0])
# 'fetches' can be a singleton
v = session.run(a)
# v is the numpy array [10, 20]
# 'fetches' can be a list.
v = session.run([a, b])
# v is a Python list with 2 numpy arrays: the 1-D array [10, 20] and the
# 1-D array [1.0, 2.0]
# 'fetches' can be arbitrary lists, tuples, namedtuple, dicts:
MyData = collections.namedtuple('MyData', ['a', 'b'])
v = session.run({'k1': MyData(a, b), 'k2': [b, a]})
# v is a dict with
# v['k1'] is a MyData namedtuple with 'a' (the numpy array [10, 20]) and
# 'b' (the numpy array [1.0, 2.0])
# v['k2'] is a list with the numpy array [1.0, 2.0] and the numpy array
# [10, 20].
Необязательный аргумент feed_dict позволяет вызывающей стороне переопределить значение тензоров в графе. Каждый ключ в feed_dict может быть одного из следующих типов:
- Если ключ —
tf.Tensor, значение может быть скалярным значением Python, строкой, списком или numpy ndarray, которое можно преобразовать в тот же типdtype, что и этот тензор. Кроме того, если ключ —tf.compat.v1.placeholder, форма значения будет проверена на совместимость с этим placeholder. - Если ключ —
tf.sparse.SparseTensor, значение должно бытьtf.compat.v1.SparseTensorValue. - Если ключ — вложенная кортеж из
TensorилиSparseTensor, значение должно быть вложенной кортежом с той же структурой, сопоставленной с соответствующими значениями, как указано выше.
Каждое значение в feed_dict должно быть преобразуемо в массив numpy типа dtype соответствующего ключа.
Необязательный аргумент options ожидает [RunOptions] протокол. Опции позволяют управлять поведением этого конкретного шага (например, включение отслеживания).
Необязательный аргумент run_metadata ожидает [RunMetadata] протокол. Когда это уместно, нетензорный результат этого шага будет собран там. Например, когда пользователи включают отслеживание в options, информация о профилировании будет собрана в этом аргументе и возвращена обратно.
| Args | |
|---|---|
fetches | Один элемент графа, список элементов графа или словарь, значениями которого являются элементы графа или списки элементов графа (описано выше). |
feed_dict | Словарь, который сопоставляет элементы графа с значениями (описано выше). |
options | [RunOptions] протокол |
run_metadata | [RunMetadata] протокол |
| Returns | |
|---|---|
Либо одно значение, если fetches — это один элемент графа, либо список значений, если fetches — это список, либо словарь с теми же ключами, что и fetches, если это словарь (описано выше). Порядок, в котором выполняются операции fetches внутри вызова, не определен. |
| Raises | |
|---|---|
RuntimeError | Если этот Session находится в недопустимом состоянии (например, закрыт). |
TypeError | Если ключи fetches или feed_dict имеют неподходящий тип. |
ValueError | Если ключи fetches или feed_dict неверны или ссылаются на Tensor, который не существует. |
__enter__
__enter__() -> 'Session'
__exit__
__exit__(
exec_type, exec_value, exec_tb
)
© 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/compat/v1/Session