【问题标题】:How to rescale images from [0,255] to [-1,1] with ImageDataGenerator?如何使用 ImageDataGenerator 将图像从 [0,255] 重新缩放到 [-1,1]?
【发布时间】:2021-01-27 21:59:23
【问题描述】:

我正在使用 ImageDataGenerator 和 flow_from_dataframe 来加载数据集。

ImageDataGenerator 允许您像这样指定重新缩放因子

datagen = ImageDataGenerator(rescale=1./255)

但是如果我想在 [-1,1] 范围内重新缩放图像怎么办?我应该先做减法,然后再做除法

images -= 128.0
images /= 128.0

ImageDataGenerator 的 rescale 中如何进行这两个操作?

【问题讨论】:

    标签: python tensorflow keras


    【解决方案1】:

    尝试使用 rescale=1/127.5-1 或者您可以使用预定义的处理器功能,例如

    preprocessing_function=tf.keras.applications.mobilenet.preprocess_input
    

    【讨论】:

      【解决方案2】:

      你可以使用这样的预处理函数:

      def rescale_img(img):
          img = img.astype(np.float32) / 255.0
          img = (img - 0.5) * 2
          return img
      

      然后在重新缩放部分你可以这样做:

      datagen = ImageDataGenerator(rescale=rescale_img())
      

      【讨论】:

        【解决方案3】:

        Keras imagedatagen rescale 参数将数据与给定值相乘。这就是它用作 1/255.0 等的原因。

        当你执行这个时:

        datagen = ImageDataGenerator(rescale=1./255)
        

        您的数据的平均值将为 0.5,范围为 0 到 1。现在是棘手的部分,您首先要将平均值设置为 0。为此,您可以使用 featurewise_centersamplewise_center。现在,它完成了,但是您的数据在 -0.5 和 0.5 之间缩放

        为确保它在 -1 和 1 之间,我们将其重新缩放 2/255.0 。所以最后的代码应该是这样的:

        datagen = ImageDataGenerator(rescale=2/255.0,
                                     featurewise_center=True,
                                     samplewise_center=True,)
        

        关于_center参数的详细介绍,可以参考docs

        【讨论】:

          猜你喜欢
          • 2020-10-31
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多