
def preprocess_image(img):
img = image.load_img(img, target_size=(299, 299))
img = image.img_to_array(img)
img = img / 255.0
return img
2.tf.io.read_file
def preprocess_image(image):
image = tf.io.read_file(image)
image = tf.image.decode_jpeg(image, channels=3)
image = tf.image.resize_with_pad(image, 227, 227)
image = image / 255.0
return image
3.tf.keras.utils.image_dataset_from_directory
tf.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,
**kwargs
)
如果你的目录结构是:
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')将返回 a ,它会tf.data.Dataset从子目录class_a和中生成批量图像class_b,以及标签 0 和 1(0 对应于class_a1,1 对应于class_b)。支持的图像格式:jpeg、png、bmp、gif。动画 gif 被截断到第一帧。
directory | 数据所在的目录。如果labels是“推断”,它应该包含子目录,每个子目录都包含一个类的图像。否则,目录结构将被忽略。 |
labels | “推断”(从目录结构生成标签)、无(无标签)或与目录中找到的图像文件数量相同大小的整数标签的列表/元组。标签应根据图像文件路径的字母数字顺序排序(通过Python 获得)。 os.walk(directory) |
label_mode |
|
class_names | 仅当“标签”是“推断”时才有效。这是类名的显式列表(必须与子目录的名称匹配)。用于控制类的顺序(否则使用字母数字顺序)。 |
color_mode | “灰度”、“rgb”、“rgba”之一。默认值:“RGB”。图像是否将转换为具有 1、3 或 4 个通道。 |
batch_size | 数据批次的大小。默认值:32。如果None,则不会对数据进行批处理(数据集将产生单个样本)。 |
image_size | 从磁盘读取图像后调整图像大小的大小。默认为. 由于管道处理必须具有相同大小的批量图像,因此必须提供这一点。 (256, 256) |
shuffle | 是否打乱数据。默认值:真。如果设置为 False,则按字母数字顺序对数据进行排序。 |
seed | 用于洗牌和转换的可选随机种子。 |
validation_split | 0 到 1 之间的可选浮点数,保留用于验证的数据的一部分。 |
subset | “培训”或“验证”之一。仅在设置时使用。 validation_split |
interpolation | 字符串,调整图像大小时使用的插值方法。默认为bilinear. 支持bilinear, nearest, bicubic, area, lanczos3, lanczos5, gaussian, mitchellcubic. |
follow_links | 是否访问符号链接指向的子目录。默认为假。 |
crop_to_aspect_ratio | 如果为 True,则调整图像大小而不会出现纵横比失真。当原始纵横比与目标纵横比不同时,将裁剪输出图像,以返回与目标纵横比匹配的图像中(大小为 )的最大可能窗口。默认情况下 ( ),可能不会保留纵横比。 image_sizecrop_to_aspect_ratio=False |
**kwargs | 旧版关键字参数。 |
Returns
一种tf.data.Dataset对象。
|
关于标签格式的规则:
- 如果
label_mode是int,则标签是int32形状张量(batch_size,)。 - 如果
label_mode是binary,标签是float32形状为 1 和 0 的张量(batch_size, 1)。 - 如果
label_mode是categorial,标签是一个float32形状张量(batch_size, num_classes),表示类索引的 one-hot 编码。
关于生成图像中通道数的规则:
- 如果
color_mode是grayscale,则图像张量中有 1 个通道。 - 如果
color_mode是rgb,则图像张量中有 3 个通道。 - 如果
color_mode是rgba,则图像张量中有 4 个通道。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)