TensorFlow не очень хорошо играет с IPython - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь использовать TensorFlow из записной книжки IPython. Я создал функцию, которая определяет заполнитель переменной. Поскольку я новичок в TensorFlow, я не инициализировал переменную должным образом и получил сообщение об ошибке, в котором говорится, что я не инициализировал заполнитель.

У меня есть две ячейки, одна с функцией и одна с вызовом функции. Независимо от того, насколько я исправляю функцию (и, конечно, перезапускаю обе ячейки), я получаю ошибки инициализации даже после исправления ошибки.

Единственный способ заставить его работать - это перезапустить ядро, которое в значительной степени превосходит цель ноутбука, я могу просто написать скрипт на Python.

1 Ответ

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

Это в основном спекуляция, когда я не вижу ваш код, но из того, что я прочитал, я считаю, что знаю, что вы делаете неправильно.

При использовании Tensorflow внутри ноутбука вы должны быть особенно осторожны, чтобы не перепутать код Building с кодом ознакомительный код. Вам нужно и нужно только определить вычислительный граф в начале. Выполнение функций, которые снова определяют граф, просто создаст другой подграф (это, вероятно, также относится к вашей функции, которая определяет заполнитель и переменные). Операция tf.global_variables_initializer также должна выполняться только один раз.

Крайне важно понимать, что граф Tensorflow не может динамически обрабатываться ноутбуком, потому что python фактически не контролирует переменные Tensorflow. В данном случае Python - это просто мета-язык для определения графа и запуска вычислений.

Таким образом, в блокноте после инициализации графа точно один раз вы можете вызывать только те функции, которые обертывают граф Tensorflow оценочный код, а не код построения графика динамически без сброса ядра. Примерами таких методов, которые только оценивают существующий граф, являются session.run , другие tf.Session методы или аналогичные методы оценки, такие как tenor.eval .

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

...