如何在 tensorflow 数据集上使用 mobilenet_v2.preprocess_input
How to use mobilenet_v2.preprocess_input on tensorflow dataset
我再次为 tensorflow 数据集的使用而苦恼。我再次通过
加载我的图片
data = keras.preprocessing.image_dataset_from_directory(
'./data',
labels='inferred',
label_mode='binary',
validation_split=0.2,
subset="training",
image_size=(img_height, img_width),
batch_size=sz_batch,
crop_to_aspect_ratio=True
)
我想在预训练的MobileNetV2中使用这个数据集
model = keras.applications.mobilenet_v2.MobileNetV2(input_shape=(img_height, img_width, 3), weights='imagenet')
documentation 表示,输入数据必须缩放到 -1 和 1 之间。为此,提供了 preprocess_input
函数。当我在我的数据集上使用这个函数时
scaled_data = tf.keras.applications.mobilenet_v2.preprocess_input(data)
我收到错误:TypeError: unsupported operand type(s) for /=: 'BatchDataset' and 'float'
那么如何在 tensorflow 数据集上正确使用这个函数呢?
也许尝试使用 tf.data.Dataset.map
:
import tensorflow as tf
import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
batch_size = 32
train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(180, 180),
batch_size=batch_size)
def preprocess(images, labels):
return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels
train_ds = train_ds.map(preprocess)
images, _ = next(iter(train_ds.take(1)))
image = images[0]
plt.imshow(image.numpy())
预处理图像之前:
仅使用 tf.keras.applications.mobilenet_v2.preprocess_input
预处理图像后:
仅使用 tf.keras.layers.Rescaling(1./255)
预处理图像后:
我再次为 tensorflow 数据集的使用而苦恼。我再次通过
加载我的图片data = keras.preprocessing.image_dataset_from_directory(
'./data',
labels='inferred',
label_mode='binary',
validation_split=0.2,
subset="training",
image_size=(img_height, img_width),
batch_size=sz_batch,
crop_to_aspect_ratio=True
)
我想在预训练的MobileNetV2中使用这个数据集
model = keras.applications.mobilenet_v2.MobileNetV2(input_shape=(img_height, img_width, 3), weights='imagenet')
documentation 表示,输入数据必须缩放到 -1 和 1 之间。为此,提供了 preprocess_input
函数。当我在我的数据集上使用这个函数时
scaled_data = tf.keras.applications.mobilenet_v2.preprocess_input(data)
我收到错误:TypeError: unsupported operand type(s) for /=: 'BatchDataset' and 'float'
那么如何在 tensorflow 数据集上正确使用这个函数呢?
也许尝试使用 tf.data.Dataset.map
:
import tensorflow as tf
import pathlib
dataset_url = "https://storage.googleapis.com/download.tensorflow.org/example_images/flower_photos.tgz"
data_dir = tf.keras.utils.get_file('flower_photos', origin=dataset_url, untar=True)
data_dir = pathlib.Path(data_dir)
batch_size = 32
train_ds = tf.keras.utils.image_dataset_from_directory(
data_dir,
validation_split=0.2,
subset="training",
seed=123,
image_size=(180, 180),
batch_size=batch_size)
def preprocess(images, labels):
return tf.keras.applications.mobilenet_v2.preprocess_input(images), labels
train_ds = train_ds.map(preprocess)
images, _ = next(iter(train_ds.take(1)))
image = images[0]
plt.imshow(image.numpy())
预处理图像之前:
仅使用 tf.keras.applications.mobilenet_v2.preprocess_input
预处理图像后:
仅使用 tf.keras.layers.Rescaling(1./255)
预处理图像后: