TF Slim和初始预测概率

时间:2017-09-22 15:56:10

标签: python tensorflow tf-slim

我使用tf slim(v1.3)训练了最初的v4层,我试图将处理集成到现有工具中,但我无法确定如何生成预测。我想要所有的预测值,而不仅仅是argmax。我有一个检查点路径和一些带图像的numpy数组(100x100x3,这是我训练的...但扩展到299x299x3)。有人能指出我正确的方向吗?我将提供多个图像用于评估,但不一定是批处理(我可能会运行一个微服务,它接受一个或多个图像并返回结果,但只加载检查点一次以减少初始化时间)。

1 个答案:

答案 0 :(得分:1)

以下是如何执行此操作的示例:

   with tf.Graph().as_default():
        tf_global_step = slim.get_or_create_global_step()
        network_fn = nets_factory.get_network_fn("inception_v4",
            num_classes=5,
            is_training=False)

        ##############################################################
        # Create a dataset provider that loads data from the dataset #
        ##############################################################
        provider = slim.dataset_data_provider.DatasetDataProvider(
            dataset,
            shuffle=False,
            common_queue_capacity=2,
            common_queue_min=1)
        [images] = provider.get(['image'])

        #####################################
        # Select the preprocessing function #
        #####################################
        image_preprocessing_fn = preprocessing_factory.get_preprocessing(
            "inception_v4",
            is_training=False)

        eval_image_size = network_fn.default_image_size
        images = image_preprocessing_fn(images, eval_image_size, eval_image_size)
        images = tf.reshape(images, [eval_image_size, eval_image_size, 3])
        images, _ = tf.train.batch(
                [images, 0],
                batch_size=len(dataset.data_sources),
                num_threads=1,
                capacity=len(dataset.data_sources))
        ####################
        # Define the model #
        ####################
        logits, _ = network_fn(images)
        variables_to_restore = slim.get_variables_to_restore()

        soft = tf.nn.softmax(logits, 1)
        predictions = tf.argmax(logits, 1)
        num_batches = 1

        if tf.gfile.IsDirectory(checkpoint_path):
            checkpoint_path = tf.train.latest_checkpoint(checkpoint_path)

        tf.logging.info('Evaluating %s' % checkpoint_path)
        r_logits, r_soft, r_prediction = slim.evaluation.evaluate_once(
            master='',
            checkpoint_path=checkpoint_path,
            logdir=eval_dir,
            num_evals=num_batches,
            eval_op=[],
            final_op=[logits, soft, predictions],
            variables_to_restore=variables_to_restore)