Python 部署Tensorflow服务模型时Tensorflow中出现运行时错误
我写了一个tensorflow代码,这个代码指的是tensorflow服务模型,它可以从web访问&我正在使用Flask API访问web,当我运行时,它说“试图使用一个封闭的会话”。有人告诉我如何解决这个问题吗 代码如下:Python 部署Tensorflow服务模型时Tensorflow中出现运行时错误,python,tensorflow,Python,Tensorflow,我写了一个tensorflow代码,这个代码指的是tensorflow服务模型,它可以从web访问&我正在使用Flask API访问web,当我运行时,它说“试图使用一个封闭的会话”。有人告诉我如何解决这个问题吗 代码如下: import tensorflow as tf import numpy as np import os, sys DATA_SIZE = 100 SAVE_PATH = './save' EPOCHS = 1000 LEARNING_RATE = 0.01 MODEL_
import tensorflow as tf
import numpy as np
import os, sys
DATA_SIZE = 100
SAVE_PATH = './save'
EPOCHS = 1000
LEARNING_RATE = 0.01
MODEL_NAME = 'test'
if not os.path.exists(SAVE_PATH):
os.mkdir(SAVE_PATH)
data = (np.random.rand(DATA_SIZE, 2), np.random.rand(DATA_SIZE, 1))
test = (np.random.rand(DATA_SIZE // 8, 2), np.random.rand(DATA_SIZE // 8, 1))
tf.reset_default_graph()
x = tf.placeholder(tf.float32, shape=[None, 2], name='inputs')
y = tf.placeholder(tf.float32, shape=[None, 1], name='targets')
net = tf.layers.dense(x, 16, activation=tf.nn.relu)
net = tf.layers.dense(net, 16, activation=tf.nn.relu)
pred = tf.layers.dense(net, 1, activation=tf.nn.sigmoid, name='prediction')
loss = tf.reduce_mean(tf.squared_difference(y, pred), name='loss')
train_step = tf.train.AdamOptimizer(LEARNING_RATE).minimize(loss)
checkpoint = tf.train.latest_checkpoint(SAVE_PATH)
should_train = checkpoint == None
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
if should_train:
print("Training")
saver = tf.train.Saver()
for epoch in range(EPOCHS):
_, curr_loss = sess.run([train_step, loss], feed_dict={x: data[0], y: data[1]})
print('EPOCH = {}, LOSS = {:0.4f}'.format(epoch, curr_loss))
path = saver.save(sess, SAVE_PATH + '/' + MODEL_NAME + '.ckpt')
print("saved at {}".format(path))
else:
print("Restoring")
graph = tf.get_default_graph()
saver = tf.train.import_meta_graph(checkpoint + '.meta')
saver.restore(sess, checkpoint)
loss = graph.get_tensor_by_name('loss:0')
test_loss = sess.run(loss, feed_dict={'inputs:0': test[0], 'targets:0': test[1]})
print(sess.run(pred, feed_dict={'inputs:0': np.random.rand(10,2)}))
print("TEST LOSS = {:0.4f}".format(test_loss))
import tensorflow as tf
import os
SAVE_PATH = './save'
MODEL_NAME = 'test'
VERSION = 1
SERVE_PATH = './serve/{}/{}'.format(MODEL_NAME, VERSION)
checkpoint = tf.train.latest_checkpoint(SAVE_PATH)
tf.reset_default_graph()
with tf.Session() as sess:
# import the saved graph
saver = tf.train.import_meta_graph(checkpoint + '.meta')
# get the graph for this session
graph = tf.get_default_graph()
sess.run(tf.global_variables_initializer())
# get the tensors that we need
inputs = graph.get_tensor_by_name('inputs:0')
predictions = graph.get_tensor_by_name('prediction/Sigmoid:0')
# create tensors info
model_input = tf.saved_model.utils.build_tensor_info(inputs)
model_output = tf.saved_model.utils.build_tensor_info(predictions)
# build signature definition
signature_definition = tf.saved_model.signature_def_utils.build_signature_def(
inputs={'inputs': model_input},
outputs={'outputs': model_output},
method_name= tf.saved_model.signature_constants.PREDICT_METHOD_NAME)
builder = tf.saved_model.builder.SavedModelBuilder(SERVE_PATH)
builder.add_meta_graph_and_variables(
sess, [tf.saved_model.tag_constants.SERVING],
signature_def_map={
tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
signature_definition
})
# Save the model so we can serve it with a model server :)
builder.save()
运行此代码后,我得到以下错误
RuntimeError Traceback (most recent call last)
<ipython-input-9-0aab8e5ba747> in <module>()
5 signature_def_map={
6 tf.saved_model.signature_constants.DEFAULT_SERVING_SIGNATURE_DEF_KEY:
----> 7 signature_definition
8 })
9 # Save the model so we can serve it with a model server :)
~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\tensorflow\python\saved_model\builder_impl.py in add_meta_graph_and_variables(self, sess, tags, signature_def_map, assets_collection, legacy_init_op, clear_devices, main_op)
377 # SavedModel can be copied or moved, this avoids the checkpoint state to
378 # become outdated.
--> 379 saver.save(sess, variables_path, write_meta_graph=False, write_state=False)
380
381 # Export the meta graph def.
~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\tensorflow\python\training\saver.py in save(self, sess, save_path, global_step, latest_filename, meta_graph_suffix, write_meta_graph, write_state)
1571 model_checkpoint_path = sess.run(
1572 self.saver_def.save_tensor_name,
-> 1573 {self.saver_def.filename_tensor_name: checkpoint_file})
1574 else:
1575 self._build_eager(
~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in run(self, fetches, feed_dict, options, run_metadata)
887 try:
888 result = self._run(None, fetches, feed_dict, options_ptr,
--> 889 run_metadata_ptr)
890 if run_metadata:
891 proto_data = tf_session.TF_GetBuffer(run_metadata_ptr)
~\AppData\Local\conda\conda\envs\tensorflow\lib\site-packages\tensorflow\python\client\session.py in _run(self, handle, fetches, feed_dict, options, run_metadata)
1045 # Check session.
1046 if self._closed:
-> 1047 raise RuntimeError('Attempted to use a closed Session.')
1048 if self.graph.version == 0:
1049 raise RuntimeError('The Session graph is empty. Add operations to the '
RuntimeError: Attempted to use a closed Session.
运行时错误回溯(最近一次调用)
在()
5签名定义图={
6 tf.saved_model.signature_constants.DEFAULT_service_signature_DEF_KEY:
---->7签名和定义
8 })
9#保存模型,以便我们可以使用模型服务器为其提供服务:)
~\AppData\Local\conda\conda\conda\envs\tensorflow\lib\site packages\tensorflow\python\saved\u model\builder\u impl.py in add\u meta\u graph\u和\u变量(self、sess、tags、signature\u def\u map、assets\u collection、legacy\u init\u op、clear\u devices、main\u op)
377#可以复制或移动SavedModel,这避免了检查点状态为
变得过时了。
-->379 saver.save(sess、变量路径、写元图=False、写状态=False)
380
381#导出元图def。
保存中的~\AppData\Local\conda\conda\conda\envs\tensorflow\lib\site packages\tensorflow\python\training\saver.py(self、sess、保存路径、全局步骤、最新文件名、元图后缀、写入元图、写入状态)
1571模型检查点路径=sess.run(
1572 self.saver_def.save_tensor_name,
->1573{self.saver\u def.filename\u tensor\u name:checkpoint\u file})
1574其他:
1575自我建设渴望(
运行中的~\AppData\Local\conda\conda\envs\tensorflow\lib\site packages\tensorflow\python\client\session.py(self、fetches、feed\u dict、options、run\u元数据)
887尝试:
888结果=self.\u运行(无、获取、馈送、选项、,
-->889运行(元数据)
890如果运行\u元数据:
891 proto_data=tf_session.tf_GetBuffer(运行元数据ptr)
运行中的~\AppData\Local\conda\conda\envs\tensorflow\lib\site packages\tensorflow\python\client\session.py(self、handle、fetches、feed、dict、options、run\u元数据)
1045#检查会话。
1046如果自行关闭:
->1047 raise RUNTIMERROR('试图使用关闭的会话')
1048如果self.graph.version==0:
1049 raise RUNTIMERROR('会话图为空。将操作添加到'
RuntimeError:试图使用已关闭的会话。
我无法跟踪此错误。请任何人解决此问题。请提前