В 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())
Вам нужно указать, что вы хотите, чтобы 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