如何在tf.estimator分类器中提高预测速度?

时间:2019-01-23 18:55:43

标签: tensorflow-estimator

我正在使用Tensorflow中的DNN分类器练习Landsat图像像素分类。模型制作很好,然后我设置了一个预测变量来对测试图像进​​行分类。测试图像为2048x3072像素,以TFRecord格式保存,补丁尺寸为256x256。在预测变量输入函数中,将对数据集进行相应的批处理,并且我希望每次迭代它时,预测变量都会在其输出处进行整个批次的预测。

def predict_input_fn(fileNames):

    def parse_image(example_proto):
        parsed_features = tf.parse_single_example(example_proto, imageFeaturesDict)
        return parsed_features

    dataset = tf.data.TFRecordDataset(fileNames, compression_type='GZIP')
    dataset = dataset.map(parse_image)   
    dataset = dataset.batch(PATCH_WIDTH * PATCH_HEIGHT)

    iterator = dataset.make_one_shot_iterator()
    return iterator.get_next()

我将函数传递给了预测变量:

predictions = classifier.predict(input_fn=lambda: predict_input_fn(fileNames))

迭代预测并生成分类标签的numpy数组:

for pred_dict in predictions:
   ... fill up the image array ...

我的问题是,当我运行代码时,我看到返回的pred_dict只包含一个像素。我研究了这个问题,并在调用yield_single_examples时发现了开关classifier.predict并将其设置为False。这应该使返回的pred_dict为一个像素块,我可以一次填充一个图像块而不是一个像素。

我尝试了单像素和批像素情况,但运行时间之间的差异并不大(280秒与300秒)。有什么办法可以提高速度?是真的,在成批处理的情况下,预测器会一次生成整个标签块,还是逐个像素地生成?

0 个答案:

没有答案