Как улучшить скорость прогнозирования в классификаторах tf.estimator? - PullRequest
0 голосов
/ 23 января 2019

Я практикую классификацию пикселей изображения Landsat, используя классификаторы DNN в Tensorflow. Создание модели в порядке, и затем я устанавливаю предиктор для классификации тестового изображения. Тестовое изображение размером 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))

И итерации по прогнозам и генерация массива классифицированных меток:

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

Моя проблема в том, что когда я запускаю код, я вижу, что возвращенный pred_dict содержит только один пиксель. Я посмотрел на проблему и нашел переключатель yield_single_examples в вызове classifier.predict и установил его на False. Это должно сделать возвращенный pred_dict патчем пикселей, и я могу заполнить массив изображений одним патчем за раз вместо одного пикселя.

Я пробовал использовать как однопиксельные, так и пакетные пиксели, но разница между временем работы была невелика (280 с против 300 с). Есть ли способ получить больше скорости? Правда ли, что в пакетном случае предиктор генерирует целое поле с метками за раз, или он все еще делает это попиксельно?

...