用python代码将jpg数据集和对应的json分成训练集验证集和测试集
时间: 2024-03-04 17:48:09 浏览: 95
python 划分数据集为训练集和测试集的方法
可以使用Python中的os、json和random模块来分割数据集。假设你的数据集包含jpg图片和对应的json文件,以下是一个简单的示例代码,将数据集分成训练集、验证集和测试集。
```python
import os
import json
import random
import shutil
# 定义数据集路径
data_path = '/path/to/dataset'
# 定义训练集、验证集和测试集路径
train_path = '/path/to/train'
val_path = '/path/to/val'
test_path = '/path/to/test'
# 定义训练集、验证集和测试集比例
train_ratio = 0.7
val_ratio = 0.2
test_ratio = 0.1
# 获取所有图片和对应的json文件
data = []
for file_name in os.listdir(data_path):
if file_name.endswith('.jpg'):
file_id = os.path.splitext(file_name)[0]
json_file = os.path.join(data_path, file_id + '.json')
if os.path.exists(json_file):
data.append((file_name, json_file))
# 随机打乱数据集
random.shuffle(data)
# 计算训练集、验证集和测试集的数量
n = len(data)
n_train = int(n * train_ratio)
n_val = int(n * val_ratio)
n_test = n - n_train - n_val
# 创建训练集目录
os.makedirs(train_path, exist_ok=True)
for file_name, json_file in data[:n_train]:
# 将图片和对应的json文件拷贝到训练集目录
shutil.copy(os.path.join(data_path, file_name), os.path.join(train_path, file_name))
shutil.copy(json_file, os.path.join(train_path, os.path.basename(json_file)))
# 创建验证集目录
os.makedirs(val_path, exist_ok=True)
for file_name, json_file in data[n_train:n_train+n_val]:
# 将图片和对应的json文件拷贝到验证集目录
shutil.copy(os.path.join(data_path, file_name), os.path.join(val_path, file_name))
shutil.copy(json_file, os.path.join(val_path, os.path.basename(json_file)))
# 创建测试集目录
os.makedirs(test_path, exist_ok=True)
for file_name, json_file in data[-n_test:]:
# 将图片和对应的json文件拷贝到测试集目录
shutil.copy(os.path.join(data_path, file_name), os.path.join(test_path, file_name))
shutil.copy(json_file, os.path.join(test_path, os.path.basename(json_file)))
```
在上面的代码中,我们首先定义了数据集的路径、训练集、验证集和测试集的路径,以及训练集、验证集和测试集的比例。然后,我们使用os.listdir()函数遍历数据集中的所有文件,仅选择jpg文件和对应的json文件,将它们组成一个列表data,并使用random.shuffle()函数打乱数据集。
接下来,我们计算训练集、验证集和测试集的数量,并使用os.makedirs()函数创建训练集、验证集和测试集的目录。最后,我们使用shutil.copy()函数将图片和对应的json文件拷贝到训练集、验证集和测试集的目录中。
注意,上面的代码仅供参考,具体的实现方式可能因为数据集的不同而有所不同。
阅读全文