You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Keras中无预定义尺寸加载.jpg图片构建标准化数据集

不预先指定尺寸加载目录图片数据集(TensorFlow/Keras)

因为image_dataset_from_directory要求统一图片尺寸才能生成批量张量,所以要实现不预先指定尺寸加载,需要用tf.data手动构建数据集,步骤如下:

1. 遍历目录获取图片路径与标签

先手动遍历数据集目录,收集所有图片的路径和对应的分类标签:

import tensorflow as tf
import os

# 替换为你的数据集根目录
data_dir = "pizza_not_pizza"
class_names = ["pizza", "not_pizza"]

image_paths = []
labels = []

for label_idx, class_name in enumerate(class_names):
    class_dir = os.path.join(data_dir, class_name)
    for img_file in os.listdir(class_dir):
        img_path = os.path.join(class_dir, img_file)
        image_paths.append(img_path)
        labels.append(label_idx)

2. 定义图片加载与转置函数

编写函数加载原尺寸图片,根据你的数据集情况转置统一尺寸:

def load_and_normalize(img_path, label):
    # 读取原图片文件
    img_raw = tf.io.read_file(img_path)
    # 解码图片,保留原尺寸和RGB通道
    img = tf.image.decode_image(img_raw, channels=3, expand_animations=False)
    # 转置384×512的图片为512×384,统一尺寸
    h, w = img.shape[0], img.shape[1]
    if h == 384 and w == 512:
        img = tf.transpose(img, perm=[1, 0, 2])
    # 归一化到[0,1]区间(模型训练常用)
    img = tf.cast(img, tf.float32) / 255.0
    return img, label

3. 构建并优化数据集

用tf.data把路径和标签转为可迭代的数据集,应用处理函数后批量:

# 从路径和标签创建基础数据集
dataset = tf.data.Dataset.from_tensor_slices((image_paths, labels))
# 并行加载处理图片
dataset = dataset.map(load_and_normalize, num_parallel_calls=tf.data.AUTOTUNE)
# 设置批量大小并预加载(提升训练效率)
dataset = dataset.batch(32).prefetch(tf.data.AUTOTUNE)

这样处理后,所有图片都会被转为512×384的张量,且全程没有预先强制指定尺寸,完全基于原图片尺寸处理。

内容的提问来源于stack exchange,提问作者Kliker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 22:36:20