Ошибка Keras/TensorFlow при работе в качестве сервера Pyro4

У меня есть клиент-серверный дизайн с использованием Pyro4, в котором код клиента выглядит следующим образом:

import Pyro4
uri         =   'PYRO:PYRO_SERVER@123.123.123.123:10000
test_1      =   Pyro4.Proxy(uri)
test_1.run_model()

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

import Pyro4
import socket
from keras.models import Sequential
from keras.layers import LSTM
import tensorflow as tf

@Pyro4.expose

class PyroServer(object):

    def run_model(self):
        session     =   tf.Session()
        session.run(tf.global_variables_initializer())
        session.run(tf.local_variables_initializer())
        session.run(tf.tables_initializer())
        session.run(tf.variables_initializer([]))
        tf.reset_default_graph()
        model = Sequential()
        model.add(LSTM(25, input_shape=(5, 10)))

host_name   =   socket.gethostbyname(socket.getfqdn())
daemon      =   Pyro4.Daemon(host = host_name,port = 10000)
uri         =   daemon.register(PyroServer,objectId = 'PYRO_SERVER')
daemon.requestLoop()

После запуска сервера первый вызов клиента в метод run_model() работает нормально. Для второго и всех последующих вызовов отображается следующее сообщение об ошибке:

Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Pyro4/core.py", строка 187, в вызове
вернуть себя.__ отправить (self.__ имя, аргументы, kwargs)
Файл "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Pyro4/core.py", строка 472, в _pyroInvoke
поднять данные # если вы видите это в вашей трассировке, вам, вероятно, следует также проверить удаленную трассировку
ValueError: Аргумент Fetch нельзя интерпретировать как Tensor. (Название операции: "lstm_1 / init"
op: "NoOp"
вход: "^lstm_1/kernel/Assign"
вход: "^lstm_1/recurrent_kernel/Assign"
ввод: "^ lstm_1 / смещение / Назначить"
не является элементом этого графа.)

Кто-нибудь может предложить возможное решение для этого?

2 ответа

Я не знаком с Tensorflow, но фактическая ошибка заключается в следующем:

ValueError: Аргумент Fetch нельзя интерпретировать как Tensor.

Упростите свой код и сделайте его сначала корректно автономным, а затем оберните его в сервис Pyro.

Эй, я использую этот код, и он прекрасно работает для меня.

$ catreeting-server.py

import Pyro4
import tensorflow as tf

@Pyro4.expose
class GreetingMaker(object):
    def get_fortune(self, name):
        var = tf.constant('Hello, TensorFlow!')
        sess = tf.Session()
        return "Hello, {0}. Here is your greeting message:\n" \
               "{1}".format(name,sess.run(var))

daemon = Pyro4.Daemon()                # make a Pyro daemon
uri = daemon.register(GreetingMaker)   # register the greeting maker as a Pyro object

print("Ready. Object uri =", uri)      # print the uri so we can use it in the client later
daemon.requestLoop()                   # start the event loop of the server to wait for calls

$ catreeting-client.py

import Pyro4

uri = input("What is the Pyro uri of the greeting object? ").strip()
name = input("What is your name? ").strip()

greeting_maker = Pyro4.Proxy(uri)         # get a Pyro proxy to the greeting object
print(greeting_maker.get_fortune(name))   # call method normally

$ pythonreeting-server.py &
[1] 2965
Готовы. Object uri = PYRO: obj_a751da78da6a4feca49f18ab664cc366 @ localhost:53025

$ pythonreeting-client.py
Что такое пироури объекта приветствия?

PYRO: obj_a751da78da6a4feca49f18ab664cc366 @ локальный:53025


Как тебя зовут?

Plm

2018-03-06 16: 20: 32.271647: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций SSE4.1, но они доступны на вашем компьютере и могут ускорить ЦП вычисления. 2018-03-06 16:20:32.271673: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций SSE4.2, но они доступны на вашем компьютере и могут ускорить ЦП вычисления. 2018-03-06 16:20:32.271678: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций AVX, но они доступны на вашем компьютере и могут ускорить вычисления ЦП. 2018-03-06 16:20:32.271682: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не была скомпилирована для использования инструкций AVX2, но они доступны на вашем компьютере и могут ускорить вычисления ЦП. 2018-03-06 16:20:32.271686: W tenorflow/core/platform/cpu_feature_guard.cc:45] Библиотека TensorFlow не скомпилирована для использования инструкций FMA, но они доступны на вашем компьютере и могут ускорить вычисления ЦП.
Здравствуйте, Plm. Вот ваше приветственное сообщение:
Привет, Тензорный поток!

И, как вы можете видеть, если подключиться к тому же URL снова, то он работает без времени инициализации TF, так как это было сделано уже во время первого вызова. Затем сохраняется стойкость при 2 отдельных вызовах, если, конечно, вы вызываете один и тот же Pyro url.

$ pythonreeting-client.py
Что такое пироури объекта приветствия?

PYRO: obj_a751da78da6a4feca49f18ab664cc366 @ локальный:53025


Как тебя зовут?

Plm2


Здравствуйте, Plm2. Вот ваше приветственное сообщение:
Привет, Тензорный поток!

Другие вопросы по тегам