Ошибка в прогнозировании с наборами данных в Keras - PullRequest
0 голосов
/ 28 января 2019

У меня есть несколько точек тренировочных данных на 6-полосных изображениях Landsat и прогнозируемое изображение, все они доступны в формате TFRecords.Мне удалось успешно построить обучающие и тестовые наборы данных, а также создать модель Keras, а также подобрать и протестировать ее.

def trainDataGenerator(fileName, numEpochs=None, batchSize=None):

  dataset = tf.data.TFRecordDataset(fileName, compression_type='GZIP')

  # Map the parsing function over the dataset
  dataset = dataset.map(parse_tfrecord) # it returnes a dictionary of bands and values, plus a label
  dataset = dataset.map(addFeatures) # It addes NDVI to the dictionary and convert features to a list (to be an np.array)
  dataset = dataset.batch(batchSize)
  dataset = dataset.repeat(numEpochs)
  return dataset

training_data = trainDataGenerator(fileName=<trainData>, numEpochs=8, batchSize=1)
testing_data = trainDataGenerator(fileName=<testData>, batchSize=1)

def keras_model():
    from tensorflow.keras.layers import Dense, Input

    inputs = Input(shape=(7,))
    x = Dense(5, activation='relu')(inputs)
    x = Dense(7, activation='relu')(x)
    x = Dense(5, activation='relu')(x)
    outputs = Dense(3, activation='softmax')(x)

    return tf.keras.Model(inputs, outputs)

model = keras_model()
model.compile('adam', 'categorical_crossentropy', metrics=['acc'])
model.fit(training_data.make_one_shot_iterator(), steps_per_epoch=57, epochs=8, verbose=0)
loss, test_acc = model.evaluate(testing_data.make_one_shot_iterator(), steps=41, verbose=0)

Предсказываемое изображение сохраняется в исправлениях размером 256x256 пикселей, поэтому у меня есть слегка измененный генератор набора данныхфункция для его обработки, а также у меня нет меток в этом случае.

def predictDataGenerator(fileNames):

    dataset = tf.data.TFRecordDataset(fileNames, compression_type='GZIP')

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

    # This function adds NDVI to a feature that doesn't have a label.
    def addImageFeatures(features):
        return addFeatures(features, None)[0]

    dataset = dataset.map(parse_image, num_parallel_calls=5)

    # Break our long tensors into many littler ones
    dataset = dataset.flat_map(lambda features: tf.data.Dataset.from_tensor_slices(features))

    # Add additional features (NDVI).
    dataset = dataset.map(addImageFeatures)

    # Read in batches corresponding to patch size.
    dataset = dataset.batch(PATCH_WIDTH * PATCH_HEIGHT)

    return dataset

dataset = predictDataGenerator(fileNames)
predictions = model.predict(dataset.make_one_shot_iterator(), steps = 96)

Я ожидаю, что смогу запустить функцию model.predict, аналогичную model.evaluate и model.fit, но когда я запущуЭто, я получаю ниже ошибки:

Traceback (most recent call last):
  File "C:\Users\sshahhey.ESFADMIN\AppData\Roaming\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\pydevd.py", line 1664, in <module>
    main()
  File "C:\Users\sshahhey.ESFADMIN\AppData\Roaming\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\pydevd.py", line 1658, in main
    globals = debugger.run(setup['file'], None, None, is_module)
  File "C:\Users\sshahhey.ESFADMIN\AppData\Roaming\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\pydevd.py", line 1068, in run
    pydev_imports.execfile(file, globals, locals)  # execute the script
  File "C:\Users\sshahhey.ESFADMIN\AppData\Roaming\JetBrains\PyCharm Community Edition 2018.2.2\helpers\pydev\_pydev_imps\_pydev_execfile.py", line 18, in execfile
    exec(compile(contents+"\n", file, 'exec'), glob, loc)
  File "C:/Users/sshahhey.ESFADMIN/OneDrive/Projects/Tensorflow/First/SampleDNNClassifier-Keras.py", line 163, in <module>
    predictions = model.predict(dataset.make_one_shot_iterator(), steps = 96)
  File "c:\python36\lib\site-packages\tensorflow\python\keras\engine\training.py", line 1864, in predict
    x, check_steps=True, steps_name='steps', steps=steps)
  File "c:\python36\lib\site-packages\tensorflow\python\keras\engine\training.py", line 986, in _standardize_user_data
    'Received %s' % next_element)
TypeError: not all arguments converted during string formatting

Кажется, что он ищет цели (метки), которые будут предоставлены, а также данные, но это прогноз, и у меня не должно быть никаких меток в настоящее время.Любая помощь?

...