从tf.keras.applications导入后,Tensorflow增强层不工作

gkl3eglg  于 2022-11-13  发布在  其他
关注(0)|答案(3)|浏览(155)

我目前正在使用tf.keras.applications中的一个模型进行训练,同时还使用了一个数据扩展层。奇怪的是,在我从applications导入模型后,扩展层不起作用。在我导入之前,扩展层确实起作用了。这是怎么回事?
而且,这是最近新版本的TF 2. 8. 0发布后才开始发生的。之前它工作得很好。
扩展层的代码是

data_augmentation = tf.keras.Sequential([
  tf.keras.layers.RandomFlip("horizontal_and_vertical"),
  tf.keras.layers.RandomRotation(0.5),
])

并且我使用

base_model = tf.keras.applications.MobileNetV3Small(
                 input_shape=(75, 50, 3), alpha=1.0, 
                 weights='imagenet', pooling='avg', include_top=False,
                 dropout_rate=0.1, include_preprocessing=False)

请帮助我了解发生了什么。您可以在此笔记本电脑https://colab.research.google.com/drive/13Jd3l2CxbvIWQv3Y7CtryOdrv2IdKNxD?usp=sharing上复制代码

cnh2zyt3

cnh2zyt31#

我注意到tf 2.8也有同样的问题。当你测试增强层时,可以通过add training =True来解决这个问题:

aug = data_augmentation(image,training=True)

原因是增强层在训练和预测(推理)中的行为不同,即它在训练中做增强,而在预测中什么也不做。理想情况下,该层应该根据情况灵活地设置training= argument。显然,上面的代码中它并不智能:它不知道您的意图是测试该层。
但我认为在构建完整模型时,仍然应该将训练参数作为默认值,让扩展层来完成这项工作。

u5rb5r59

u5rb5r592#

无法从单个输出中查看增强效果。请设置一个范围以查看增强效果。

data_augmentation = tf.keras.Sequential([
  tf.keras.layers.RandomFlip("horizontal_and_vertical",seed=5),
  tf.keras.layers.RandomRotation(0.5),
])
for i in range(4):
  aug = data_augmentation(image)
  plt.imshow(aug.numpy().astype('uint8'))
  plt.show()
q0qdq0h2

q0qdq0h23#

让我告诉你,这里有一个很大的数据扩充修正,数据没有被扩充。

`data_augmentation = tf.keras.Sequential([
  tf.keras.layers.RandomFlip("horizontal_and_vertical",seed=5),
  tf.keras.layers.RandomRotation(0.5),
])
for i in range(4):
  aug = data_augmentation(image, training = True)
  plt.imshow(aug.numpy().astype('uint8'))
  plt.show()`

现在它应该工作了,你的图像应该被增强了。这是一个错误,应该在下一次更新中修复,我想是的。

相关问题