用python写一个图像分类自动划分训练集测试集验证集的代码
时间: 2023-10-08 20:06:30 浏览: 184
以下是使用Python实现图像分类自动划分训练集、测试集和验证集的代码:
```python
import os
import shutil
import random
# 定义数据集路径
data_dir = '/path/to/dataset'
train_dir = '/path/to/train'
test_dir = '/path/to/test'
val_dir = '/path/to/validation'
# 定义训练集、测试集和验证集的比例
train_ratio = 0.7
test_ratio = 0.2
val_ratio = 0.1
# 获取所有图像文件的路径
image_paths = []
for root, dirs, files in os.walk(data_dir):
for file in files:
if file.endswith('.jpg'):
image_paths.append(os.path.join(root, file))
# 打乱图像文件的路径
random.shuffle(image_paths)
# 计算图像文件的数量
num_images = len(image_paths)
# 计算训练集、测试集和验证集的数量
num_train = int(num_images * train_ratio)
num_test = int(num_images * test_ratio)
num_val = num_images - num_train - num_test
# 创建训练集、测试集和验证集的目录
if not os.path.exists(train_dir):
os.makedirs(train_dir)
if not os.path.exists(test_dir):
os.makedirs(test_dir)
if not os.path.exists(val_dir):
os.makedirs(val_dir)
# 复制图像文件到训练集、测试集和验证集的目录
for i in range(num_train):
shutil.copy(image_paths[i], os.path.join(train_dir, os.path.basename(image_paths[i])))
for i in range(num_train, num_train+num_test):
shutil.copy(image_paths[i], os.path.join(test_dir, os.path.basename(image_paths[i])))
for i in range(num_train+num_test, num_images):
shutil.copy(image_paths[i], os.path.join(val_dir, os.path.basename(image_paths[i])))
```
上述代码中,首先定义了数据集路径、训练集、测试集和验证集的路径,以及训练集、测试集和验证集的比例。然后,获取所有图像文件的路径,并打乱路径顺序。接着,计算训练集、测试集和验证集的数量,创建相应的目录。最后,将图像文件复制到训练集、测试集和验证集的目录中。需要注意的是,代码中使用了Python自带的shutil库,用于复制文件。在实际使用中,也可以使用其他方法来实现文件复制。
阅读全文