Tensorflow Keras RandomFlip 对所有图像应用相同的翻转

问题描述 投票:0回答:0

版本:tensorflow-gpu 2.10.0

我创建了一个在预处理期间应用的数据增强层。除了翻转,它还涉及对比度、旋转和亮度的随机变化。我使用以下代码来测试增强:

#Defining data augmentation Keras layer
data_augmentation = tf.keras.Sequential([
    tf.keras.layers.RandomFlip("horizontal_and_vertical"),
    tf.keras.layers.RandomBrightness(0.25, seed=10),
    tf.keras.layers.RandomContrast(0.5, seed=20),
    tf.keras.layers.RandomRotation(0.028, fill_mode="constant", seed=35),
])

#Augmenting 1 image 9 times for testing
image = train_ds.take(1)
images = image.repeat(9)
images = images.map(lambda x,y: (data_augmentation(x, training=True),y),num_parallel_calls=AUTOTUNE)
n=0
for i,l in images:
    i=tf.cast(i, tf.uint8)
    ax = plt.subplot(3, 3, n + 1)
    _ = plt.imshow(i, cmap="gray",vmin=0,vmax=255)
    plt.axis("off")
    n+=1

对比度、亮度和旋转的随机变化是我想要的:9张图像中的每一张都有不同的对比度、亮度和旋转。种子允许我重现这些结果(虽然很有趣,子图的顺序会有所不同)。我使用了种子,以便我可以重新创建相同的数据集。但是,RandomFlip 对所有图像应用完全相同的翻转。更重要的是,即使有种子,每次我重新运行代码时都会应用不同的翻转。在我看来,RandomFlip 的行为并不像它应该的那样,因为它没有对每个图像应用随机翻转?

我已经尝试在数据增强层中改变 RandomFlip 的种子和位置。我希望它只是特定的种子,但它似乎发生在其他种子上。我也尝试过在我的代码开头使用和不使用以下内容:

tf.random.set_seed(12)
np.random.seed(0)

没有效果。

tensorflow keras deep-learning conv-neural-network data-augmentation
© www.soinside.com 2019 - 2024. All rights reserved.