VGG16猫狗二分类数据集处理
接续前篇VGG16猫狗二分类案例,数据集处理建议:下载数据集后需严格按照一下目录进行创建。
1.规范目录结构
必须按以下结构创建文件夹
vgg16-cat-dog/
├── train/ # 训练集
│ ├── cat/ # 存放所有猫的图片
│ └── dog/ # 存放所有狗的图片
├── test/ # 测试集(从train中划分20%)
│ ├── cat/
│ └── dog/
└── model/ # 保存训练好的模型(代码会自动创建)
2.数据集划分
将数据集划分为训练集和测试集。训练集文件夹命名为train,其中建立两个文件夹分别为cat和dog,每个文件夹里存放相应类别的图片。测试集命名为test(需手动或用代码划分,比例为8:2)。
# 数据集划分代码(保存为split_dataset.py,放在项目根目录运行)
import os
import shutil
import random
# 原始解压后的图片路径
original_dir = "./train_original" # 你解压train.zip的路径
# 目标路径
train_dir = "./train"
test_dir = "./test"
# 划分比例
split_ratio = 0.8
# 创建文件夹
os.makedirs(os.path.join(train_dir, "cat"), exist_ok=True)
os.makedirs(os.path.join(train_dir, "dog"), exist_ok=True)
os.makedirs(os.path.join(test_dir, "cat"), exist_ok=True)
os.makedirs(os.path.join(test_dir, "dog"), exist_ok=True)
# 筛选所有猫狗图片
cat_images = [f for f in os.listdir(original_dir) if f.startswith("cat")]
dog_images = [f for f in os.listdir(original_dir) if f.startswith("dog")]
# 随机打乱
random.shuffle(cat_images)
random.shuffle(dog_images)
# 划分训练集和测试集
train_cat = cat_images[:int(len(cat_images)*split_ratio)]
test_cat = cat_images[int(len(cat_images)*split_ratio):]
train_dog = dog_images[:int(len(dog_images)*split_ratio)]
test_dog = dog_images[int(len(dog_images)*split_ratio):]
# 复制图片到对应文件夹
for img in train_cat:
shutil.copy(os.path.join(original_dir, img), os.path.join(train_dir, "cat", img))
for img in test_cat:
shutil.copy(os.path.join(original_dir, img), os.path.join(test_dir, "cat", img))
for img in train_dog:
shutil.copy(os.path.join(original_dir, img), os.path.join(train_dir, "dog", img))
for img in test_dog:
shutil.copy(os.path.join(original_dir, img), os.path.join(test_dir, "dog", img))
print(f"训练集:猫{len(train_cat)}张,狗{len(train_dog)}张")
print(f"测试集:猫{len(test_cat)}张,狗{len(test_dog)}张")
