当前位置: 首页 > news >正文

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)}张")

http://www.jsqmd.com/news/862014/

相关文章:

  • ops-transformer 基础设施性能实验报告:GE 融合边界与 Runtime 调度效率实测
  • 机器学习之逻辑回归算法
  • 远程技术面试的潜规则:摄像头角度可能影响你的录用
  • RUST编程学习.2语法
  • N-Tron交换机的网络可用性到底有多强?
  • 终极指南:5分钟掌握iFakeLocation实现iOS虚拟定位的完整方法
  • 鸿蒙中的自由流转
  • Midjourney色彩一致性难题破解(CMYK→sRGB跨域校准实战手册)
  • 英伟达的“围城”:云厂商自研芯片,攻到了哪一步?
  • 2026 年 5 月云手机横评:傲晨云领跑,红手指 / 川川云对比实测
  • SMARTFORM不同模板一起打印
  • 计算机毕业设计 | SpringBoot+vue医院药品管理系统(附源码+论文)
  • 彻底掌控Windows Defender:开源工具defender-control完全指南
  • 中画幅风格仅限Pro订阅者可用?不!3个未公开API参数+本地化--seed锁定技巧,让免费账户稳定输出中画幅质感
  • 在家办公效率低?试试这个“空间切换”技巧
  • Word文档保护技巧:防止内容被轻易复制
  • 2026年4月钢边止水带企业推荐分析,聚乙烯闭孔泡沫板/聚乙烯泡沫棒/钢边止水带/橡胶止水带,钢边止水带生产厂家找哪家 - 品牌推荐师
  • STM32矩阵按键详解——4×4行列扫描与非阻塞消抖(硬件总结六)
  • 把SAC model的数据导出到BW的ADSO中
  • 几十万买的数字孪生低代码平台集体落灰?被隐瞒的落地真相,终于说透了
  • 【Unity】MiniGame编辑器小游戏(十六)中国象棋局域网对战【Chinese Chess】(下)
  • 变压器设计-基于AP法
  • 408 每日一题 Day 2:二叉树的重构与遍历
  • 强制启动 Cursor IDE 主程序(不带 Agent 模式)
  • leetcode思路-236 二叉树的最近公共祖先
  • 最常见的漏洞有哪些?如何发现存在的漏洞呢
  • 分布式团队的代码协作规范:从分支策略到提交信息格式
  • 联想拯救者工具箱终极指南:释放游戏本性能的免费开源神器
  • 模块化机房建设解决方案
  • Cell Host Microbe | 西奈山伊坎医学院房刚团队揭示肠道微生物的表观遗传“押注对冲“策略