Цель использования "with tf.Session ()"? - PullRequest
0 голосов
/ 21 декабря 2018

Я практикую метод keras, называемый concatenate.

И использование выражения with в этом примере заставило меня задуматься над целью этого выражения

Пример кода выглядит следующим образом:

import numpy as np 
import keras.backend as K
import tensorflow as tf

t1 = K.variable(np.array([ [[1, 2], [2, 3]], [[4, 4], [5, 3]]]))
t2 = K.variable(np.array([[[7, 4], [8, 4]], [[2, 10], [15, 11]]]))

d0 = K.concatenate([t1 , t2] , axis=-2)

init = tf.global_variables_initializer()

with tf.Session() as sess:
    sess.run(init)
    print(sess.run(d0))

Затем я проверяю документ из: tenorflow и говорит, что:

Сеанс может владеть ресурсами, такими как tf.Variable, tf.QueueBase иtf.ReaderBase.Важно освободить эти ресурсы, когда они больше не требуются.Чтобы сделать это, либо вызовите метод tf.Session.close в сеансе, либо используйте сеанс в качестве диспетчера контекста.

Я уверен, что все это уже объяснил, но может кто-нибудь дать мнеболее интуитивное объяснение.

Заранее спасибо и хорошего дня!

Ответы [ 2 ]

0 голосов
/ 03 августа 2019

Документация тензорного потока очень специфична в этом отношении.

Поскольку tf.Session владеет физическими ресурсами (такими как графические процессоры и сетевые соединения),обычно он используется в качестве диспетчера контекста (в блоке with), который автоматически закрывает сеанс при выходе из блока.

Также возможно создать сеанс без использования блока with, ноВы должны явно вызвать tf.Session.close , когда закончите с ним, чтобы освободить ресурсы.

0 голосов
/ 21 декабря 2018

tf.Session() инициирует объект TensorFlow Graph, в котором тензоры обрабатываются с помощью операций (или операций).Блок with завершает сеанс, как только операции завершаются.Следовательно, нет необходимости звонить Session.close.Кроме того, сеанс содержит переменные, глобальные переменные, заполнители и операции.Они должны быть инициированы после создания сеанса.Поэтому мы называем tf.global_variables_initializer().run()

Граф содержит тензоры и операции.Чтобы инициировать график, создается сеанс, который запускает график.Другими словами, graph предоставляет схему, тогда как сеанс обрабатывает график для вычисления значений (тензоров).

...