首页 > 解决方案 > 数据预处理:keras 层 vs tf.image.resize

问题描述

我想预处理来自 tensorflow 2(版本 2.3.0)中的 'oxford_flowers102' 数据集的图像以训练初始 v3 网络。我找到了两种调整图像大小的方法,两者都有效,似乎都生成相同的输出。我不明白哪种解决方案更适合我的任务。你能解释一下哪种方式更好用吗?

  1. 用 tf.image.resize

   IMAGE_RES = 229
   dataset, dataset_info = tfds.load('oxford_flowers102', with_info=True, as_supervised=True)
   dataset_info
   test_set, training_set, validation_set = dataset['test'], dataset['train'], dataset['validation']

   get_label_name = dataset_info.features['label'].int2str
   image, label = next(iter(training_set))
   image = tf.image.resize(image, (IMAGE_RES, IMAGE_RES)) / 255.0
   _ = plt.imshow(image)
   _ = plt.title(get_label_name(label))
   plt.show()

  1. 带有 keras 层
    IMAGE_RES = 229
    dataset, dataset_info = tfds.load('oxford_flowers102', with_info=True, as_supervised=True)
    dataset_info
    test_set, training_set, validation_set = dataset['test'], dataset['train'], dataset['validation']
    get_label_name = dataset_info.features['label'].int2str



    resize_and_rescale = tf.keras.Sequential([
        layers.experimental.preprocessing.Resizing(IMAGE_RES, IMAGE_RES),
        layers.experimental.preprocessing.Rescaling(1. / 255)
    ])

    image, label = next(iter(training_set))
    _ = plt.imshow(image)
    _ = plt.title(get_label_name(label))

    result = resize_and_rescale(image)
    _ = plt.imshow(result)
    plt.show()
 

标签: pythontensorflowkeras

解决方案


技术上

调整层大小tf.keras.layers.Resizing使用tf.image.resize() “幕后”功能(证明)。

几乎

调整层允许在模型中内置预处理,以便在输入图像数据输入模型时对其进行预处理。tf.image.resize() 函数非常适合tf.data.Dataset.map() 方法,它在加载图像时实时预处理图像。

相关答案:https ://stackoverflow.com/a/66575616/7204581


推荐阅读