TensorFlow数据增强功能会发出警告:使用while_loop进行转换。

11

我根据官方 TensorFlow 教程 使用数据增强技术。 首先,我创建了一个包含增强层的序列模型:

def _getAugmentationFunction(self):
    if not self.augmentation:
        return None
    pipeline = []
    
    pipeline.append(layers.RandomFlip('horizontal_and_vertical'))
    pipeline.append(layers.RandomRotation(30))
    pipeline.append(layers.RandomTranslation(0.1, 0.1, fill_mode='nearest'))
    pipeline.append(layers.RandomBrightness(0.1, value_range=(0.0, 1.0)))

    model =  Sequential(pipeline)
    return lambda x, y: (model(x, training=True), y)

然后,我在数据集上使用map函数:

data_augmentation = self._getAugmentationFunction()
self.train_data = self.train_data.map(data_augmentation,
                                      num_parallel_calls=AUTOTUNE)

代码的运行结果符合预期,但是我收到了以下警告信息:
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2
WARNING:tensorflow:Using a while_loop for converting ImageProjectiveTransformV3
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2
WARNING:tensorflow:Using a while_loop for converting ImageProjectiveTransformV3
WARNING:tensorflow:Using a while_loop for converting RngReadAndSkip
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting Bitcast
WARNING:tensorflow:Using a while_loop for converting StatelessRandomUniformV2

这些警告的原因是什么,如何修复? 我正在使用TF v2.9.1

4个回答

6
这不仅是警告 - 这些层非常慢!在我的情况下,一个时代的时间从30秒增加到几分钟。这似乎是keras版本2.9和2.10(包含在tensorflow中)中的一个错误:https://github.com/keras-team/keras-cv/issues/581。在TF v2.8.3上工作正常 - 没有错误消息,训练速度很快。在我的arch系统上 - 我通过使用pacman安装python-tensorflow-opt-cuda软件包安装了TF - 我发出了以下命令来解决问题:
python -m pip install tensorflow-gpu==2.8.3

谢谢。降级到tf 2.8.3对我有用。 - learner

4

更新此答案后的6个月,keras 2.11仍然存在这个错误

我尝试了3天时间将我的输入管道直接应用于层或切换到tf.image之类的东西,但我会告诉人们只需降级到tensorflow 2.8.3,这将节省您大量的时间和精力。

正如先前所说,这将节省您很多时间,而且新版本的tensorflow有一些问题,不仅在keras层中,而且在使用image_dataset_from_directory在tf2.11中加载数据集需要3.30分钟,而在版本2.8.3中只需要33秒。

以下是这些低效率的根本原因,因此我建议等待2.12或下一个实现(如果尚未解决):

https://github.com/keras-team/keras-cv/issues/291


我已经转向使用PyTorch了。它要少得多的错误和繁琐。 - Karol Borkowski

2

可以通过tf.get_logger().setLevel()来管理TensorFlow中的警告。要关闭警告,您可以使用

tf.get_logger().setLevel('ERROR')

我尝试在gist中复制它,请在这里找到。谢谢!


1

降级操作很好,但我的一些增强功能不可用。
'tensorflow.keras.layers'没有 'RandomBrightness'属性。

GPU支持消失了。 在2.10及以上版本中已包含。 必须重新安装tensorflow-gpu。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接