Я реализовал следующий конвейер дополнения данных для своего кода Тензор потока (1.14):
X_train, m_train, y_train = data.get_filenames()
X_val, m_val, y_val = data.get_filenames(train=False)
train_dataset = tf.data.Dataset.from_tensor_slices((X_train, m_train, y_train))#(images, mask, gt))
train_dataset = train_dataset.shuffle(buffer_size=1000))
train_dataset = train_dataset.repeat(count=2)
train_dataset = train_dataset.map(data.load, num_parallel_calls=tf.data.experimental.AUTOTUNE)
train_dataset = train_dataset.map(data.augment, num_parallel_calls=tf.data.experimental.AUTOTUNE)
train_dataset = train_dataset.batch(batch_size)
train_dataset = train_dataset.prefetch(buffer_size=1)
val_dataset = tf.data.Dataset.from_tensor_slices((X_val, m_val, y_val))
val_dataset = val_dataset.shuffle(buffer_size=100)
val_dataset = val_dataset.map(data.load, num_parallel_calls=tf.data.experimental.AUTOTUNE)
val_dataset = val_dataset.batch(batch_size)
val_dataset = val_dataset.prefetch(buffer_size=1)
iterator = tf.data.Iterator.from_structure(train_dataset.output_types,
train_dataset.output_shapes)
data_im, data_mask, data_gt = iterator.get_next()
# create the initialization operations
train_init_op = iterator.make_initializer(train_dataset)
val_init_op = iterator.make_initializer(val_dataset)
def augment(masked, mask, gt):
seed = random.random()
masked = tf.image.random_flip_left_right(masked, seed=seed)
mask = tf.image.random_flip_left_right(mask, seed=seed)
gt = tf.image.random_flip_left_right(gt, seed=seed)
masked = tf.image.random_flip_up_down(masked, seed=seed)
mask = tf.image.random_flip_up_down(mask, seed=seed)
gt = tf.image.random_flip_up_down(gt, seed=seed)
return masked, mask, gt
Даже несмотря на то, что я получаю из него связные изображения, кривая тренировочных потерь имеет очень странное поведение: Я до сих пор не в состоянии понять это. (Вы можете видеть это здесь )
Что-то не так с моей реализацией? Я продолжаю читать учебники и другие вопросы, но ничего не получается.
Спасибо заранее!