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

t5fffqht  于 2023-04-21  发布在  其他
关注(0)|答案(1)|浏览(146)

版本: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)

没有效果。

7rtdyuoh

7rtdyuoh1#

在找到similar problem on Github之后,我将我的Tensorflow版本恢复到了tensorflow-gpu 2.9.2。看起来这是Tensorflow 2.10的一个bug,Github用户验证了RandomFlip在2.9.2版本上的行为是正确的。对于像我这样使用RandomFlip模块并希望使用自己的GPU的任何其他用户来说,这一点很重要。因为2.10以上的版本不支持原生Windows上的GPU。

相关问题