У меня есть несколько точек тренировочных данных на 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
Кажется, что он ищет цели (метки), которые будут предоставлены, а также данные, но это прогноз, и у меня не должно быть никаких меток в настоящее время.Любая помощь?