通过 tf.image.convert_image_dtype 函数进行图像归一化
Image normalization by tf.image.convert_image_dtype function
根据文档 tf.image.convert_image_dtype
“使用浮点值表示的图像应具有 [0,1] 范围内的值。”
但是在keras教程中(https://keras.io/examples/vision/cutmix/)我看到了下面的预处理函数:
def preprocess_image(image, label):
image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
image = tf.image.convert_image_dtype(image, tf.float32) / 255.0
return image, label
我的问题是:为什么他们除以 255,而 tf.image.convert_image_dtype
已经完成了这项工作?
当使用 convert_image_dtype(image, tf.float32)
时,仅将图像中的数字类型转换为 float32
并且不放置 [0,1) 但是当您除以 255.0
时,您将数字移动到 [ 0,1) 我们为 Convolutional Layers
.
执行此操作
import tensorflow_datasets as tfds
import tensorflow as tf
dataset = tfds.load('cifar10', as_supervised=True, split='train').batch(1)
for image, label in dataset.take(1):
print(image[0])
IMG_SIZE = 64
def preprocess_image(image, label):
image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
image = tf.image.convert_image_dtype(image, tf.float32) / 255.0
# or
# image = tf.cast(image, tf.float32) / 255.0
return image, label
dataset = dataset.map(preprocess_image)
for image, label in dataset.take(1):
print(image[0])
输出:
tf.Tensor(
[[[143 96 70]
[141 96 72]
[135 93 72]
...
[212 177 147]
[219 185 155]
[221 187 157]]], shape=(32, 32, 3), dtype=uint8)
tf.Tensor(
[[[0.56078434 0.3764706 0.27450982]
[0.5588235 0.3764706 0.2764706 ]
[0.55490196 0.3764706 0.28039217]
...
[0.8607843 0.72745097 0.6098039 ]
[0.86470586 0.73137254 0.6137255 ]
[0.8666667 0.73333335 0.6156863 ]]], shape=(64, 64, 3), dtype=float32)
根据文档 tf.image.convert_image_dtype
“使用浮点值表示的图像应具有 [0,1] 范围内的值。”
但是在keras教程中(https://keras.io/examples/vision/cutmix/)我看到了下面的预处理函数:
def preprocess_image(image, label):
image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
image = tf.image.convert_image_dtype(image, tf.float32) / 255.0
return image, label
我的问题是:为什么他们除以 255,而 tf.image.convert_image_dtype
已经完成了这项工作?
当使用 convert_image_dtype(image, tf.float32)
时,仅将图像中的数字类型转换为 float32
并且不放置 [0,1) 但是当您除以 255.0
时,您将数字移动到 [ 0,1) 我们为 Convolutional Layers
.
import tensorflow_datasets as tfds
import tensorflow as tf
dataset = tfds.load('cifar10', as_supervised=True, split='train').batch(1)
for image, label in dataset.take(1):
print(image[0])
IMG_SIZE = 64
def preprocess_image(image, label):
image = tf.image.resize(image, (IMG_SIZE, IMG_SIZE))
image = tf.image.convert_image_dtype(image, tf.float32) / 255.0
# or
# image = tf.cast(image, tf.float32) / 255.0
return image, label
dataset = dataset.map(preprocess_image)
for image, label in dataset.take(1):
print(image[0])
输出:
tf.Tensor(
[[[143 96 70]
[141 96 72]
[135 93 72]
...
[212 177 147]
[219 185 155]
[221 187 157]]], shape=(32, 32, 3), dtype=uint8)
tf.Tensor(
[[[0.56078434 0.3764706 0.27450982]
[0.5588235 0.3764706 0.2764706 ]
[0.55490196 0.3764706 0.28039217]
...
[0.8607843 0.72745097 0.6098039 ]
[0.86470586 0.73137254 0.6137255 ]
[0.8666667 0.73333335 0.6156863 ]]], shape=(64, 64, 3), dtype=float32)