image_dataset_from_directory
函数keras.utils.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,
pad_to_aspect_ratio=False,
data_format=None,
verbose=True,
)
从目录中的图像文件生成一个 tf.data.Dataset
。
如果你的目录结构如下:
main_directory/
...class_a/
......a_image_1.jpg
......a_image_2.jpg
...class_b/
......b_image_1.jpg
......b_image_2.jpg
那么调用 image_dataset_from_directory(main_directory, labels='inferred')
将返回一个 tf.data.Dataset
,该数据集会生成来自子目录 class_a
和 class_b
的图像批次,以及标签 0 和 1(0 对应于 class_a
,1 对应于 class_b
)。
支持的图像格式:.jpeg
、.jpg
、.png
、.bmp
、.gif
。动画 GIF 将截取第一帧。
参数
labels
为 "inferred"
,则它应该包含子目录,每个子目录包含一个类别的图像。否则,目录结构将被忽略。"inferred"
(从目录结构生成标签)、None
(无标签)或一个与目录中找到的图像文件数量相同的整数标签列表/元组。标签应根据图像文件路径的字母数字顺序排序(在 Python 中通过 os.walk(directory)
获得)。labels
编码方式的字符串。选项包括:"int"
:表示标签被编码为整数(例如,用于 sparse_categorical_crossentropy
损失)。"categorical"
:表示标签被编码为分类向量(例如,用于 categorical_crossentropy
损失)。"binary"
:表示标签(只能有 2 个)被编码为值为 0 或 1 的 float32
标量(例如,用于 binary_crossentropy
)。None
(无标签)。labels
为 "inferred"
时有效。这是类名列表(必须与子目录的名称匹配)。用于控制类的顺序(否则使用字母数字顺序)。"grayscale"
、"rgb"
、"rgba"
之一。图像是否将转换为具有 1、3 或 4 个通道。默认为 "rgb"
。None
,则数据不会被批处理(数据集将生成单个样本)。(height, width)
。由于管道处理必须具有相同大小的图像批次,因此必须提供此参数。默认为 (256, 256)
。True
。如果设置为 False
,则按字母数字顺序排序数据。"training"
、"validation"
或 "both"
。仅在设置了 validation_split
时使用。当 subset="both"
时,实用程序将返回两个数据集的元组(分别为训练数据集和验证数据集)。"bilinear"
、"nearest"
、"bicubic"
、"area"
、"lanczos3"
、"lanczos5"
、"gaussian"
、"mitchellcubic"
。默认为 "bilinear"
。False
。True
,则在不失真纵横比的情况下调整图像大小。当原始纵横比与目标纵横比不同时,输出图像将被裁剪,以便返回图像中与目标纵横比匹配的最大可能窗口(大小为 image_size
)。默认情况下(crop_to_aspect_ratio=False
),可能不会保留纵横比。True
,则在不失真纵横比的情况下调整图像大小。当原始纵横比与目标纵横比不同时,输出图像将被填充,以便返回图像中与目标纵横比匹配的最大可能窗口(大小为 image_size
)。默认情况下(pad_to_aspect_ratio=False
),可能不会保留纵横比。True
。返回值
一个 tf.data.Dataset
对象。
label_mode
为 None
,则它会生成形状为 (batch_size, image_size[0], image_size[1], num_channels)
的 float32
张量,用于编码图像(有关 num_channels
的规则,请参见下文)。(images, labels)
,其中 images
的形状为 (batch_size, image_size[0], image_size[1], num_channels)
,而 labels
遵循下面描述的格式。标签格式规则
label_mode
为 "int"
,则标签为形状为 (batch_size,)
的 int32
张量。label_mode
为 "binary"
,则标签为形状为 (batch_size, 1)
的包含 1 和 0 的 float32
张量。label_mode
为 "categorical"
,则标签为形状为 (batch_size, num_classes)
的 float32
张量,表示类索引的独热编码。生成的图像中通道数量规则
color_mode
为 "grayscale"
,则图像张量中包含 1 个通道。color_mode
为 "rgb"
,则图像张量中包含 3 个通道。color_mode
为 "rgba"
,则图像张量中包含 4 个通道。load_img
函数keras.utils.load_img(
path,
color_mode="rgb",
target_size=None,
interpolation="nearest",
keep_aspect_ratio=False,
)
将图像加载到 PIL 格式。
示例
image = keras.utils.load_img(image_path)
input_arr = keras.utils.img_to_array(image)
input_arr = np.array([input_arr]) # Convert single image to a batch.
predictions = model.predict(input_arr)
参数
"grayscale"
、"rgb"
、"rgba"
之一。默认值:"rgb"
。所需的图像格式。None
(默认为原始大小)或整数元组 (img_height, img_width)
。"nearest"
、"bilinear"
和 "bicubic"
。如果安装了 PIL 版本 1.1.3 或更高版本,则还支持 "lanczos"
。如果安装了 PIL 版本 3.4.0 或更高版本,则还支持 "box"
和 "hamming"
。默认情况下,使用 "nearest"
。返回值
一个 PIL Image 实例。
img_to_array
函数keras.utils.img_to_array(img, data_format=None, dtype=None)
将 PIL Image 实例转换为 NumPy 数组。
示例
from PIL import Image
img_data = np.random.random(size=(100, 100, 3))
img = keras.utils.array_to_img(img_data)
array = keras.utils.image.img_to_array(img)
参数
"channels_first"
或 "channels_last"
。默认为 None
,在这种情况下,使用全局设置 keras.backend.image_data_format()
(除非你更改了它,否则默认为 "channels_last"
)。None
表示使用全局设置 keras.backend.floatx()
(除非你更改了它,否则默认为 "float32"
)。返回值
一个 3D NumPy 数组。
save_img
函数keras.utils.save_img(
path, x, data_format=None, file_format=None, scale=True, **kwargs
)
将存储为 NumPy 数组的图像保存到路径或文件对象。
参数
"channels_first"
或 "channels_last"
。[0, 255]
之间。PIL.Image.save()
的其他关键字参数。array_to_img
函数keras.utils.array_to_img(x, data_format=None, scale=True, dtype=None)
将 3D NumPy 数组转换为 PIL Image 实例。
示例
from PIL import Image
img = np.random.random(size=(100, 100, 3))
pil_img = keras.utils.array_to_img(img)
参数
"channels_first"
或 "channels_last"
。默认为 None
,在这种情况下,使用全局设置 keras.backend.image_data_format()
(除非你更改了它,否则默认为 "channels_last"
)。True
。None
表示使用全局设置 keras.backend.floatx()
(除非你更改了它,否则默认为 "float32"
)。默认为 None
。返回值
一个 PIL Image 实例。