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 (или чем-то преобразуемым в массив NumPy) с соответствующим типом элементов и формой. См. tf.Session.run для подробностей о разрешенных типах ключей и значений данных.
Возвращаемый вызываемый объект будет иметь тот же тип возвращаемого значения, что и tf.Session.run(fetches, ...). Например, если fetches является tf.Tensor, вызываемый объект вернёт массив NumPy; если 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 может быть одним элементом графа или вложенным списком, кортежем, именованным кортежем, словарем или OrderedDict, содержащими элементы графа в качестве листьев. Элемент графа может быть одного из следующих типов:
tf.Operation. Соответствующее полученное значение будетNone.tf.Tensor. Соответствующее полученное значение будет массивом NumPy, содержащим значение этого тензора.tf.sparse.SparseTensor. Соответствующее полученное значение будетtf.compat.v1.SparseTensorValue, содержащим значение этого разреженного тензора.- Операция
get_tensor_handle. Соответствующее полученное значение будет массивом NumPy, содержащим дескриптор этого тензора. - Имя тензора или операции в графе —
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, значение может быть скаляром, строкой, списком или массивом NumPy Python, которые могут быть преобразованы в тот жеdtype, что и этот тензор. Кроме того, если ключ —tf.compat.v1.placeholder, форма значения проверяется на совместимость с этим placeholder. - Если ключ —
tf.sparse.SparseTensor, значение должно бытьtf.compat.v1.SparseTensorValue. - Если ключ — вложенный кортеж
TensorилиSparseTensor, значение должно быть вложенным кортежем с той же структурой, что сопоставляет им соответствующие значения, как описано выше.
Каждое значение в feed_dict должно быть преобразуемо в массив NumPy с типом данных соответствующего ключа.
Необязательный аргумент options ожидает протокол [RunOptions]. Опции позволяют управлять поведением этого конкретного шага (например, включение отслеживания).
Необязательный аргумент run_metadata ожидает протокол [RunMetadata]. При необходимости нетензорный результат этого шага собирается там. Например, когда пользователи включают отслеживание в options, информация о профилировании будет собираться в этот аргумент и возвращаться обратно.
| Аргументы | |
|---|---|
fetches | Один элемент графа, список элементов графа или словарь, значениями которого являются элементы графа или списки элементов графа (описано выше). |
feed_dict | Словарь, сопоставляющий элементы графа с значениями (описано выше). |
options | Протокол [RunOptions] |
run_metadata | Протокол [RunMetadata] |
| Возвращаемое значение | |
|---|---|
Либо одно значение, если fetches — это один элемент графа, либо список значений, если fetches — это список, или словарь с теми же ключами, что и fetches (описано выше). Порядок вычисления операций fetches внутри вызова не определён. |
| Исключения | |
|---|---|
RuntimeError | Если этот Session находится в недопустимом состоянии (например, закрыт). |
TypeError | Если ключи fetches или feed_dict имеют неправильный тип. |
ValueError | Если ключи fetches или feed_dict недействительны или ссылаются на Tensor , который не существует. |
__enter__
__enter__()
__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/versions/r2.9/api_docs/python/tf/compat/v1/Session