【发布时间】:2018-03-07 08:30:53
【问题描述】:
我有一个使用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.__send(self.__name, args, kwargs)
_pyroInvoke
中的文件“/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/Pyro4/core.py”,第 472 行 raise data # 如果您在回溯中看到这一点,您可能也应该检查远程回溯
ValueError:Fetch 参数不能解释为张量。 (操作名称:“lstm_1/init”
操作:“NoOp”
输入:“^lstm_1/内核/分配”
输入:“^lstm_1/recurrent_kernel/Assign”
输入:“^lstm_1/bias/Assign”
不是该图的元素。)
谁能为此提出一个可能的解决方案?
【问题讨论】:
-
尽量先定义模型,再初始化变量。
-
您是否按照错误消息中的注释查看了远程 Pyro 回溯?
标签: python tensorflow keras lstm pyro4