在Tensorflow中,向keras模型添加数据扩充层会使训练速度降低10倍以上

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

我将数据扩充添加到tensorflow 模型中,如下所示:

data_augmentation = keras.Sequential([
  layers.experimental.preprocessing.RandomRotation(factor=0.4, fill_mode="wrap"),
  layers.experimental.preprocessing.RandomTranslation(height_factor=0.2, width_factor=0.2, fill_mode="wrap"),
  layers.experimental.preprocessing.RandomFlip("horizontal"),
  layers.experimental.preprocessing.RandomContrast(factor=0.2),
  layers.experimental.preprocessing.RandomHeight(factor=0.2),
  layers.experimental.preprocessing.RandomWidth(factor=0.2)
])

input_shape = (299, 299, 3)

inceptionV3_base = tf.keras.applications.InceptionV3(
    input_shape=input_shape,
    include_top=False,
    weights='imagenet'
)

tf_model = tf.keras.Sequential([
    tf.keras.layers.InputLayer(input_shape=input_shape),
    data_augmentation,
    inceptionV3_base,
    tf.keras.layers.GlobalAveragePooling2D(),
    tf.keras.layers.Dense(1024, activation='relu'),
    tf.keras.layers.Dense(len(classes), activation='softmax')
])

data_augmentation图层添加到model会使训练速度降低13倍。我是否正确使用了keras预处理图层?

cclgggtu

cclgggtu1#

我有同样的问题-是失踪的ptxasnvidia-cuda-toolkit包为我)。

lf5gs5x2

lf5gs5x22#

有两种添加数据扩充的方法:1-在模型内部,就像您所做的那样。2-在模型外部,在训练之前,使用tf.data.Dataset.map()
也许尝试option 2可以让您的模型训练更快。试试吧!更多详情请点击此处:https://keras.io/guides/preprocessing_layers/
还有很多其他的方法可以优化训练,比如把数据输入模型的方法。你是否使用了tf.data.Dataset方法,比如cache()和prefetch()。更多的细节可以在这里找到:https://www.tensorflow.org/tutorials/load_data/images#configure_the_dataset_for_performance

wgmfuz8q

wgmfuz8q3#

https://stackoverflow.com/a/73751638/17739476找到了这个答案,它也解决了我的速度慢的问题,结果是tensorflow 2.8.3运行预处理层的速度快得多,不知道为什么

相关问题