按指定比例划分数据集为训练集、验证集、测试集,并将结果保存在三个文件夹中
时间: 2024-05-08 09:16:47 浏览: 157
目标检测数据集:路面缺陷检测数据(VOC标注格式的xml文件,已经做了训练集和测试集划分)
5星 · 资源好评率100%
以下是一个Python代码示例,可以按照指定的比例划分数据集为训练集、验证集和测试集,并将结果保存在三个文件夹中:
```python
import os
import shutil
import random
# 设置数据集路径和划分比例
data_dir = "/path/to/dataset"
train_ratio = 0.6
val_ratio = 0.2
test_ratio = 0.2
# 创建保存训练集、验证集和测试集的文件夹
train_dir = os.path.join(data_dir, "train")
val_dir = os.path.join(data_dir, "val")
test_dir = os.path.join(data_dir, "test")
os.makedirs(train_dir, exist_ok=True)
os.makedirs(val_dir, exist_ok=True)
os.makedirs(test_dir, exist_ok=True)
# 遍历数据集文件夹,将文件名和对应的标签存储到列表中
data = []
for label in os.listdir(data_dir):
label_dir = os.path.join(data_dir, label)
if os.path.isdir(label_dir):
file_list = os.listdir(label_dir)
for file_name in file_list:
file_path = os.path.join(label_dir, file_name)
data.append((file_path, label))
# 打乱数据集顺序
random.shuffle(data)
# 计算数据集的大小
data_size = len(data)
train_size = int(data_size * train_ratio)
val_size = int(data_size * val_ratio)
test_size = data_size - train_size - val_size
# 将数据集划分为训练集、验证集和测试集
train_data = data[:train_size]
val_data = data[train_size:train_size+val_size]
test_data = data[-test_size:]
# 将训练集、验证集和测试集的文件复制到对应的文件夹中
for file_path, label in train_data:
label_dir = os.path.join(train_dir, label)
os.makedirs(label_dir, exist_ok=True)
shutil.copy(file_path, label_dir)
for file_path, label in val_data:
label_dir = os.path.join(val_dir, label)
os.makedirs(label_dir, exist_ok=True)
shutil.copy(file_path, label_dir)
for file_path, label in test_data:
label_dir = os.path.join(test_dir, label)
os.makedirs(label_dir, exist_ok=True)
shutil.copy(file_path, label_dir)
```
请注意,上述代码假设数据集的每个类别都存储在一个单独的文件夹中,并且每个文件夹包含该类别的所有图像。如果您的数据集不符合这种结构,您需要相应地修改代码。
阅读全文