python划分训练集和测试集_python将图像划分成训练集,验证集和测试集

importosimportrandomimportshutilfrom shutil importcopy2"""os.listdir会将文件夹下的文件名集合成一个列表并返回"""

defgetDir(filepath):

pathlist=os.listdir(filepath)returnpathlist"""制作五类图像总的训练集,验证集和测试集所需要的文件夹,例如训练集的文件夹中装有五个文件夹,这些文件夹分别装有一定比例的五类图像"""

defmkTotalDir(data_path):

os.makedirs(data_path)

dic=['train','validation','test']for i in range(0,3):

current_path=data_path+dic[i]+'/'

#这个函数用来判断当前路径是否存在,如果存在则创建失败,如果不存在则可以成功创建

isExists=os.path.exists(current_path)if notisExists:

os.makedirs(current_path)print('successful'+dic[i])else:print('is existed')return

"""传入的参数是五类图像原本的路径,返回的是这个路径下各类图像的名称列表和图像的类别数"""

defgetClassesMes(source_path):

classes_name_list=getDir(source_path)

classes_num=len(classes_name_list)returnclasses_name_list,classes_num"""change_path其实就是制作好的五类图像总的训练集,验证集和测试集的路径,sourcepath和上面一个函数相同

这个函数是用来建训练集,测试集,验证集下五类图像的文件夹,就是建15个文件夹,当然也可以建很多类"""

defmkClassDir(source_path,change_path):

classes_name_list,classes_num=getClassesMes(source_path)for i inrange(0,classes_num):

current_class_path=os.path.join(change_path,classes_name_list[i])

isExists=os.path.exists(current_class_path)if notisExists:

os.makedirs(current_class_path)print('successful'+classes_name_list[i])else:print('is existed')"""source_path:原始多类图像的存放路径

train_path:训练集图像的存放路径

validation_path:验证集图像的存放路径

test_path:测试集图像的存放路径"""

defdivideTrainValidationTest(source_path,train_path,validation_path,test_path):"""先获取五类图像的名称列表和类别数目"""classes_name_list,classes_num=getClassesMes(source_path)"""调用上面的函数,在训练集验证集和测试集文件夹下建立五类图像的文件夹"""mkClassDir(source_path,train_path)

mkClassDir(source_path,validation_path)

mkClassDir(source_path,test_path)"""先将一类图像的路径拿出来,将这个路径下所有这类的图片,就是800张图片的文件名做成一个列表,使用os.listdir函数,

然后再将列表里面的所有图像名进行shuffle就是随机打乱,然后从打乱后的图像中抽7成放入训练集,2成放入验证集,1成

放入测试集的图像名称列表"""

for i inrange(0,classes_num):

source_image_dir=os.listdir(source_path+classes_name_list[i]+'/')

random.shuffle(source_image_dir)

train_image_list=source_image_dir[0:int(0.7*len(source_image_dir))]

validation_image_list=source_image_dir[int(0.7*len(source_image_dir)):int(0.9*len(source_image_dir))]

test_image_list=source_image_dir[int(0.9*len(source_image_dir)):]"""找到每一个集合列表中每一张图像的原始图像位置,然后将这张图像复制到目标的路径下,一共是五类图像

每类图像随机被分成三个去向,使用shutil库中的copy2函数进行复制,当然也可以使用move函数,但是move

相当于移动图像,当操作结束后,原始文件夹中的图像会都跑到目标文件夹中,如果划分不正确你想重新划分

就需要备份,不然的话很麻烦"""

for train_image intrain_image_list:

origins_train_image_path=source_path+classes_name_list[i]+'/'+train_image

new_train_image_path=train_path+classes_name_list[i]+'/'copy2(origins_train_image_path,new_train_image_path)for validation_image invalidation_image_list:

origins_validation_image_path=source_path+classes_name_list[i]+'/'+validation_image

new_validation_image_path=validation_path+classes_name_list[i]+'/'copy2(origins_validation_image_path,new_validation_image_path)for test_image intest_image_list:

origins_test_image_path=source_path+classes_name_list[i]+'/'+test_image

new_test_image_path=test_path+classes_name_list[i]+'/'copy2(origins_test_image_path,new_test_image_path)if __name__=='__main__':

data_path= 'D:/软件/pycharmProject/wenyuPy/Dataset/VGG16/'source_path= 'C:/Users/Administrator/Desktop/dataset/ImageData/'train_path= 'D:/软件/pycharmProject/wenyuPy/Dataset/VGG16/train/'validation_path= 'D:/软件/pycharmProject/wenyuPy/Dataset/VGG16/validation/'test_path= 'D:/软件/pycharmProject/wenyuPy/Dataset/VGG16/test/'mkTotalDir(data_path)

divideTrainValidationTest(source_path, train_path, validation_path, test_path)

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用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库,用于复制文件。在实际使用,也可以使用其他方法来实现文件复制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值