Я работаю над набором данных дистанционного зондирования, который требует от меня вручную загрузить две папки с входными изображениями (1024, 1024, 3)
и объединить каждую пару во вход (1024, 1024, 6)
. Каждая этикетка имеет формат (1024, 1024, 1)
.
Следовательно, конечный файл tf.data.Dataset
должен иметь размер ((None, 1024, 1024, 6), (None, 1024, 1024, 1))
, где None
- размер пакета.
После руководство по Загрузка изображений в TensorFlow и Обучите и оцените с помощью Keras , мой набор данных был в форме <ParallelMapDataset shapes: ((None, None, 6), (None, None, 1)), types: (tf.float32, tf.float32)>
.
Поэтому он не может перейти в model.fit()
и возвращает ошибку 'ParallelMapDataset' object has no attribute 'ndim'
.
Соответствующий код:
base_path = './LEVIR-CD/'
train_path_list = tf.data.Dataset.list_files(base_path + 'train/A/*.png')
test_path_list = tf.data.Dataset.list_files(base_path + 'test/A/*.png')
val_path_list = tf.data.Dataset.list_files(base_path + 'val/A/*.png')
def process_path(a_path):
b_path = tf.strings.regex_replace(a_path, '/A/', '/B/')
label_path = tf.strings.regex_replace(a_path, '/A/', '/label/')
a = tf.image.decode_png(tf.io.read_file(a_path), channels=3) / 255
b = tf.image.decode_png(tf.io.read_file(b_path), channels=3) / 255
label = tf.image.decode_png(tf.io.read_file(label_path), channels = 1) / 255
return concatenate([a, b], axis = 2), label
train_ds = train_path_list.map(process_path, num_parallel_calls = tf.data.experimental.AUTOTUNE)
test_ds = test_path_list.map(process_path, num_parallel_calls = tf.data.experimental.AUTOTUNE)
val_ds = val_path_list.map(process_path, num_parallel_calls = tf.data.experimental.AUTOTUNE)
isinstance(train_ds, tf.data.Dataset) # ==> True
model.fit(train_ds) # ==> Error
Обновление: tf.image.resize(a, [1024, 1024])
, которое изменяет размер этих 1024 * 1024 изображений до того же размера, решит проблему с отсутствующим размером, но ошибка останется.