image_dataset_from_directory
functiontf.keras.preprocessing.image_dataset_from_directory(
directory,
labels="inferred",
label_mode="int",
class_names=None,
color_mode="rgb",
batch_size=32,
image_size=(256, 256),
shuffle=True,
seed=None,
validation_split=None,
subset=None,
interpolation="bilinear",
follow_links=False,
crop_to_aspect_ratio=False,
**kwargs
)
Generates a tf.data.Dataset
from image files in a directory.
If your directory structure is:
main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg
Then calling image_dataset_from_directory(main_directory, labels='inferred')
will return a tf.data.Dataset
that yields batches of images from
the subdirectories class_a
and class_b
, together with labels
0 and 1 (0 corresponding to class_a
and 1 corresponding to class_b
).
Supported image formats: jpeg, png, bmp, gif. Animated gifs are truncated to the first frame.
Arguments
labels
is "inferred", it should contain
subdirectories, each containing images for a class.
Otherwise, the directory structure is ignored.os.walk(directory)
in Python).sparse_categorical_crossentropy
loss).
- 'categorical' means that the labels are
encoded as a categorical vector
(e.g. for categorical_crossentropy
loss).
- 'binary' means that the labels (there can be only 2)
are encoded as float32
scalars with values 0 or 1
(e.g. for binary_crossentropy
).
- None (no labels).(256, 256)
.
Since the pipeline processes batches of images that must all have
the same size, this must be provided.validation_split
is set.bilinear
. Supports bilinear
, nearest
, bicubic
,
area
, lanczos3
, lanczos5
, gaussian
, mitchellcubic
.image_size
) that matches
the target aspect ratio. By default (crop_to_aspect_ratio=False
),
aspect ratio may not be preserved.Returns
A tf.data.Dataset
object.
- If label_mode
is None, it yields float32
tensors of shape
(batch_size, image_size[0], image_size[1], num_channels)
,
encoding images (see below for rules regarding num_channels
).
- Otherwise, it yields a tuple (images, labels)
, where images
has shape (batch_size, image_size[0], image_size[1], num_channels)
,
and labels
follows the format described below.
Rules regarding labels format:
- if label_mode
is int
, the labels are an int32
tensor of shape
(batch_size,)
.
- if label_mode
is binary
, the labels are a float32
tensor of
1s and 0s of shape (batch_size, 1)
.
- if label_mode
is categorial
, the labels are a float32
tensor
of shape (batch_size, num_classes)
, representing a one-hot
encoding of the class index.
Rules regarding number of channels in the yielded images:
- if color_mode
is grayscale
,
there's 1 channel in the image tensors.
- if color_mode
is rgb
,
there are 3 channel in the image tensors.
- if color_mode
is rgba
,
there are 4 channel in the image tensors.
load_img
functiontf.keras.preprocessing.image.load_img(
path, grayscale=False, color_mode="rgb", target_size=None, interpolation="nearest"
)
Loads an image into PIL format.
Usage:
image = tf.keras.preprocessing.image.load_img(image_path)
input_arr = tf.keras.preprocessing.image.img_to_array(image)
input_arr = np.array([input_arr]) # Convert single image to a batch.
predictions = model.predict(input_arr)
Arguments
color_mode="grayscale"
.None
(default to original size)
or tuple of ints (img_height, img_width)
.Returns
A PIL Image instance.
Raises
img_to_array
functiontf.keras.preprocessing.image.img_to_array(img, data_format=None, dtype=None)
Converts a PIL Image instance to a Numpy array.
Usage:
from PIL import Image
img_data = np.random.random(size=(100, 100, 3))
img = tf.keras.preprocessing.image.array_to_img(img_data)
array = tf.keras.preprocessing.image.img_to_array(img)
Arguments
None
, in which case the global setting
tf.keras.backend.image_data_format()
is used (unless you changed it,
it defaults to "channels_last").None
, in which case the global setting
tf.keras.backend.floatx()
is used (unless you changed it, it defaults
to "float32")Returns
A 3D Numpy array.
Raises
img
or data_format
is passed.