我正在使用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秒)。有什么办法可以提高速度?是真的,在成批处理的情况下,预测器会一次生成整个标签块,还是逐个像素地生成?