Python TensorFlow预测也会对删除的图像运行

Python TensorFlow预测也会对删除的图像运行,python,tensorflow,image-recognition,Python,Tensorflow,Image Recognition,我们正在使用tensorflow库进行人脸识别。我们的代码适用于单个图像。但当我们将其作为API运行时,每个后续请求的预测时间都会增加。这是因为它会搜索先前预测的图像,而这些图像在理想情况下是不会发生的。请在下面找到我正在使用的代码 def train: with tf.Session(config=tf.ConfigProto(log_device_placement=False)) as sess: test_set = _get_test_data(input

我们正在使用tensorflow库进行人脸识别。我们的代码适用于单个图像。但当我们将其作为API运行时,每个后续请求的预测时间都会增加。这是因为它会搜索先前预测的图像,而这些图像在理想情况下是不会发生的。请在下面找到我正在使用的代码

def train:   
    with tf.Session(config=tf.ConfigProto(log_device_placement=False)) as sess:
        test_set = _get_test_data(input_directory)

        images, labels = _load_images_and_labels(test_set, image_size=160, batch_size=batch_size,
                                                              num_threads=4, num_epochs=1)

        _load_model(model_filepath=model_path)

        init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
        sess.run(init_op)

        images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
        embedding_layer = tf.get_default_graph().get_tensor_by_name("embeddings:0")
        phase_train_placeholder = tf.get_default_graph().get_tensor_by_name("phase_train:0")

        coord = tf.train.Coordinator()
        threads = tf.train.start_queue_runners(sess=sess,coord=coord)

        emb_array, label_array = _create_embeddings(embedding_layer, images, labels, images_placeholder,
                                                phase_train_placeholder, sess)

        classifier_filename = classifier_output_path

        class_name, prob = _evaluate_classifier(emb_array, label_array, classifier_filename)
        coord.request_stop()
        coord.join(threads)

def _create_embeddings(embedding_layer, images, labels, images_placeholder, phase_train_placeholder, sess):
    emb_array = None
    label_array = None
    try:
        i = 0
        while True:
            print("batch images")
            batch_images, batch_labels = sess.run([images, labels])
            print('Processing iteration {} batch of size: {}'.format(i, len(batch_labels)))
            emb = sess.run(embedding_layer,
                       feed_dict={images_placeholder: batch_images, phase_train_placeholder: False})

            emb_array = np.concatenate([emb_array, emb]) if emb_array is not None else emb
            label_array = np.concatenate([label_array, batch_labels]) if label_array is not None else batch_labels
            i += 1

    except tf.errors.OutOfRangeError:
        pass

return emb_array, label_array
它会在以下位置搜索先前预测的图像:

`batch_images, batch_labels = sess.run([images, labels])`

在创建嵌入函数中。我认为这是一些未关闭线程的问题,因为sess.run会对所有排队的线程运行。在调试期间,我发现先前预测的图像信息位于默认图形中,该图形是在执行以下行时拾取的

    images_placeholder = tf.get_default_graph().get_tensor_by_name("input:0")
    embedding_layer = tf.get_default_graph().get_tensor_by_name("embeddings:0")
因此,通过在会话开始前重置图形,可以解决扫描先前预测的图像的问题

tf.reset_default_graph()