我要实现的体系结构是在会话中定义有关tf.placeholder
值的一些操作,然后还原先前保存的会话并将其传递给另一个在单独线程中处理线程的类。我将.run
进行恢复的会话。这是代码:
with tf.Session() as sess:
tf_input = tf.placeholder(tf.float32, [1, INPUT_D, INPUT_D, 3], name = 'input_data')
model = yolov3(num_classes, anchors)
with tf.variable_scope('yolov3'):
pred_feature_maps = model.forward(tf_input, False)
pred_boxes, pred_confs, pred_probs = model.predict(pred_feature_maps)
pred_scores = pred_confs * pred_probs
boxes, scores, labels = gpu_nms(pred_boxes, pred_scores, num_classes, max_boxes=30, score_thresh=0.4, iou_thresh=0.5)
ops = [boxes, scores, labels]
saver = tf.train.Saver()
saver.restore(sess, restore_path)
然后将其传递给处理线程的类,如下所示:
boxloader = BoxLoader(_, _, sess, ops, tf_input).start()
位置:
def __init__(self, dataloader, encoder, sess, ops, tf_input):
self.Q = Queue()
self.dataloader = dataloader
self.encoder = encoder
self.sess = sess
self.model = yolo
self.ops = ops
self.input = tf_input
以及更新方法:
boxes, scores, labels = self.sess.run(self.ops, feed_dict = {self.input:frame_})
感觉逻辑是理智的,在这里我定义了(默认)保存在sess默认图中的操作,当我将sess传递给类时,应该使用self.input
代表tf_input
占位符并在同一张图中运行它。
问题是,这是正确的方法吗?还是我必然会遇到图形为空等问题?
我对tensorflow还是相当陌生的,并尝试了在运行时图形和会话进行交互的不同方式,因此任何建议都将受到高度赞赏
====更新
运行时,我收到“尝试使用关闭的会话”