Не могу использовать переменную TensorFlow дважды - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь познакомиться с TensorFlow, и я не уверен насчет заполнителей, переменных и тому подобного. Чтобы упростить задачу, я попытался создать очень простое вычисление - заполнитель и переменная, которая всего лишь два раза.

Я поместил все в функцию, вот так:

import tensorflow as tf

def try_variable(value):
    x = tf.placeholder(tf.float64, name='x')
    v = tf.Variable(x * 2, name='v', validate_shape=False)

    with tf.Session() as session:
        init = tf.global_variables_initializer()
        session.run(init, feed_dict={x: value})
        return session.run(v)

Затем я вызываю функцию:

print(try_variable(80)) 

И действительно, вывод составляет 160.

Но когда я позвоню снова:

print(try_variable(80))

Я получаю сообщение об ошибке:

InvalidArgumentError: Вы должны передать значение для тензора-заполнителя 'x' с dtype double

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 апреля 2018

Прямо сейчас вы создаете новую переменную и заполнитель каждый раз, когда вызываете функцию, поэтому во второй раз, когда вы вызываете функцию try_variable, у вас фактически есть 2 заполнителя и 2 переменные TensorFlow! x, x_1, v, v_1.

Итак, во второй раз, когда вы запускаете операцию init, вы предоставляете начальное значение только для заполнителя x_1, который теперь связан с переменной python x.

Если вы хотите напечатать название всех тензоров на текущем графике, вы можете позвонить

print [n.name for n in tf.get_default_graph().as_graph_def().node]

Если вы все еще хотите создавать 2 новых тензора при каждом вызове функции, один из вариантов - сбросить график по умолчанию с помощью команды tf.reset_default_graph() каждый раз, когда вызывается функция - крайне не рекомендуется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...