Я использую tf.data.Dataset
для input_fn
в коде TensorFlow.Мне нужно читать все каналы отдельно, так как они хранятся в разных файлах.В приведенном ниже коде показана функция загрузки и обработки.
def load_images_as_tensor(image_paths, dtype=np.uint8):
n_channels = 6
image_paths = image_paths
data = np.ndarray(shape=(512, 512, n_channels), dtype=dtype)
for ix, img_path in enumerate(image_paths):
data[:, :, ix] = load_image(img_path)
return(data)
def process(img, pixel_stats=GLOBAL_PIXEL_STATS, use_bfloat16 = True):
if pixel_stats is not None:
mean, std = pixel_stats
img = (tf.cast(img, tf.float32) - mean) / std
if use_bfloat16:
img = tf.image.convert_image_dtype(img, dtype=tf.bfloat16)
img = img.set_shape([512, 512, 6])
return(img)
def input_fn(params):
data = tf.data.Dataset.from_tensor_slices(tmp2)
data = data.map(lambda x: tf.py_func(load_images_as_tensor,[x], tf.uint8))
data = data.map(lambda x: process(x, GLOBAL_PIXEL_STATS, True))
return(data)
Из-за использования tf.py_func
TensorFlow не может получить форму ввода.Пройдя через проблему TensorFlow на github, я подумал, что указание фигуры вручную исправит ошибку.Я все еще получаю сообщение об ошибке
TypeError: Неподдерживаемое возвращаемое значение из функции, переданной в Dataset.map (): Нет.