Как извлечь значения с помощью eval () в tenorflow и сколько раз нам нужно запустить сессию

1

В tensorflow мы создаем графики, а затем, чтобы передать значения на график, мы должны запустить сеанс. В следующем коде я запускаю сеанс один раз, а затем пытаюсь распечатать фильтр двумя разными способами. Но я не могу получить результат с помощью eval. Нужно ли снова упоминать tf.Session, чтобы извлечь значение eval? Я также читал, что команда eval использует сеанс по умолчанию. Поэтому, согласно моему пониманию, я должен упомянуть об этом один раз.

filter = tf.random_normal(shape=[2,1,1], seed=123)
sess=tf.Session()
print(sess.run(filter))
print(filter.eval())
Теги:
tensorflow

1 ответ

2
Лучший ответ

Вам нужно указать, что вы хотите, чтобы sess была вашим сеансом по умолчанию. Вы можете сделать это несколькими способами. Один из них является менеджером контекста:

filter = tf.random_normal(shape=[2,1,1], seed=123)
sess = tf.Session()
with sess.as_default():
    print(sess.run(filter))
    print(filter.eval())

Другой вариант - использовать tf.InteractiveSession, который является обычным сеансом, который регистрирует себя по умолчанию при построении:

filter = tf.random_normal(shape=[2,1,1], seed=123)
sess = tf.InteractiveSession()
print(sess.run(filter))
print(filter.eval())

Как следует из названия, tf.InteractiveSession рекомендуется для интерактивного использования. Полные программы или модули должны предпочесть менеджеру контекста (или просто избегать .eval()), чтобы избежать ошибок.

EDIT: Если вы используете контекстный менеджер, вы также можете использовать его, чтобы убедиться, что ваш сеанс также закрыт:

filter = tf.random_normal(shape=[2,1,1], seed=123)
with tf.Session() as sess, sess.as_default():
    print(sess.run(filter))
    print(filter.eval())
# sess will be closed after with block

Ещё вопросы

Сообщество Overcoder
Наверх
Меню