将会话传递给对象并在该对象的方法中运行操作

时间:2019-03-29 12:27:33

标签: python-3.x tensorflow

我要实现的体系结构是在会话中定义有关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还是相当陌生的,并尝试了在运行时图形和会话进行交互的不同方式,因此任何建议都将受到高度赞赏

====更新

运行时,我收到“尝试使用关闭的会话”

0 个答案:

没有答案