如何将多文件夹图片随机拆分出16张至指定文件夹,剩余用于K折交叉验证?
解决方案
tf.keras.utils.image_dataset_from_directory是用来加载图片生成TensorFlow可直接使用的数据集对象的,没法帮你完成物理文件的拆分操作。你可以用Python的os、shutil和random库实现需求,具体代码如下:
import os import shutil import random # 配置路径 source_dir = "你的原始图片文件夹路径" # 替换成你的实际路径 val_dir = "备用验证文件夹路径" # 存放16张备用图的文件夹 kfold_dir = "K折训练用文件夹路径" # 存放剩余图片的文件夹 # 创建目标文件夹(不存在则自动创建) os.makedirs(val_dir, exist_ok=True) os.makedirs(kfold_dir, exist_ok=True) # 筛选文件夹内所有.png格式图片 all_pngs = [f for f in os.listdir(source_dir) if f.lower().endswith(".png")] # 随机打乱图片列表 random.shuffle(all_pngs) # 拆分出16张备用图和剩余图片 val_imgs = all_pngs[:16] kfold_imgs = all_pngs[16:] # 复制备用图到目标文件夹 for img in val_imgs: src_path = os.path.join(source_dir, img) dst_path = os.path.join(val_dir, img) shutil.copy(src_path, dst_path) # 复制剩余图片到K折训练文件夹 for img in kfold_imgs: src_path = os.path.join(source_dir, img) dst_path = os.path.join(kfold_dir, img) shutil.copy(src_path, dst_path)
额外说明:
- 如果想移动文件而非复制,把
shutil.copy替换成shutil.move即可 - 确保原始文件夹内的png图片数量不少于16张,否则会报错
- 若你的图片是按类别分文件夹存放的(比如分类任务的标准数据集结构),可以在外层加循环遍历每个类别文件夹,再执行上述拆分逻辑
内容的提问来源于stack exchange,提问作者Anna
相关产品推荐
相关产品推荐

