深度学习数据集制作:Python合并文件夹教程
40 浏览量
更新于2024-08-30
1
收藏 203KB PDF 举报
本文主要介绍了如何使用Python将两个文件夹合并到一个新的文件夹中,以创建自定义数据集,特别适用于深度学习中的数据预处理。这个案例是关于煤矿工人人脸识别的数据集,数据集中包含两类照片:矿下和矿上。在制作数据集的过程中,会将数据分为训练集和测试集,进一步细分为训练、验证和两个特定场景的测试子集。
首先,我们需要了解数据集的结构。在这个例子中,原始数据集由三个工人的照片组成,每个工人有矿下(A开头的文件夹)和矿上(B开头的文件夹)两种状态。首先,创建一个新文件夹,用于存放训练集(0.7的比例)和测试集(0.3的比例)。接下来,创建四个子文件夹,分别是`train`(训练集)、`val`(验证集)、`valb`(矿下测试集)和`vall`(矿上测试集)。
为了实现这一目标,我们需要使用Python的一些内置库,如`numpy`、`os`和`shutil`。`os.listdir()`函数用于读取原始数据集中的所有文件夹,`shutil`库则用于移动文件。首先,我们将所有以"A"开头的文件夹(矿下照片)放入`c`列表,以"B"开头的文件夹(矿上照片)放入`d`列表。然后,根据所需的训练集和测试集比例,将这些文件夹随机分配到对应的子文件夹中。
以下是一段可能的Python代码实现:
```python
import numpy as np
import os
import shutil
# 定义原始数据集路径
path = r'C:\Users\Administrator.SKY-20180518VHY\Desktop\rx\ore'
# 获取数据集中的所有文件夹
data = os.listdir(path)
# 创建存储矿下和矿上照片的列表
c = [folder for folder in data if folder.startswith('A')]
d = [folder for folder in data if folder.startswith('B')]
# 定义目标文件夹路径
train_root = 'C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\train'
val_root = 'C:\\Users\\Administrator.SKY-20180518VHY\\Desktop\\myself\\test'
# 创建子文件夹
os.makedirs(train_root, exist_ok=True)
os.makedirs(os.path.join(val_root, 'val'), exist_ok=True)
os.makedirs(os.path.join(val_root, 'valb'), exist_ok=True)
os.makedirs(os.path.join(val_root, 'vall'), exist_ok=True)
# 随机分配数据到训练和测试集
random.shuffle(data)
split_index = int(len(data) * 0.7)
train_data = data[:split_index]
test_data = data[split_index:]
# 将训练数据分配到train文件夹
for folder in train_data:
src = os.path.join(path, folder)
dst = os.path.join(train_root, folder)
shutil.move(src, dst)
# 将测试数据分配到val、valb和vall文件夹
for folder in test_data:
src = os.path.join(path, folder)
if folder.startswith('A'): # 矿下照片
dst = os.path.join(val_root, 'valb', folder)
else: # 矿上照片
dst = os.path.join(val_root, 'vall', folder)
shutil.move(src, dst)
```
通过上述步骤,我们可以将原始数据集整理成符合深度学习框架需求的结构,便于训练和验证模型。对于实际应用,这个过程可能会更复杂,例如添加数据增强、标签处理等步骤,但这个示例提供了一个基本的框架,可以根据具体需求进行扩展。
2020-09-16 上传
2020-12-21 上传
2023-12-10 上传
182 浏览量
2021-10-16 上传
weixin_38747566
- 粉丝: 12
- 资源: 931
最新资源
- 探索数据转换实验平台在设备装置中的应用
- 使用git-log-to-tikz.py将Git日志转换为TIKZ图形
- 小栗子源码2.9.3版本发布
- 使用Tinder-Hack-Client实现Tinder API交互
- Android Studio新模板:个性化Material Design导航抽屉
- React API分页模块:数据获取与页面管理
- C语言实现顺序表的动态分配方法
- 光催化分解水产氢固溶体催化剂制备技术揭秘
- VS2013环境下tinyxml库的32位与64位编译指南
- 网易云歌词情感分析系统实现与架构
- React应用展示GitHub用户详细信息及项目分析
- LayUI2.1.6帮助文档API功能详解
- 全栈开发实现的chatgpt应用可打包小程序/H5/App
- C++实现顺序表的动态内存分配技术
- Java制作水果格斗游戏:策略与随机性的结合
- 基于若依框架的后台管理系统开发实例解析