python使用random.sample将数据集随机划分为训练集与验证集并另存在文件夹中,设置随机种子

该博客介绍了一种使用random.sample函数将数据集按照特定比例(如9:1或8:2)划分为训练集和验证集的方法。通过读取图片和其对应的标签文件名,创建新的文件夹存放划分后的数据,并确保数据集的可重复性。代码示例展示了如何实现这一过程,包括设置随机种子、移动图片和标签文件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在做深度学习或者其他学习需要的时候,要求我们将数据集划分为训练集和验证集,一般来说按照9:1,8:2的比例划分训练集和验证集都是可以的。

我们基于random.sample函数来实现对数据的划分。

假设我们数据摆放如下:

images里面存放的 是训练的图片,labels里面存放的是图片的标签信息,如TXT,xml等信息。

我们最终做成的结果如下:

在每一个文件夹里都存在一个train文件和val文件,val里存放的文件来源是从train里面随机抽取出来的。train与val里面的数据没有交集。

实现思路:

我的图片的命名是:XXX.jpg,标签的命名是:XXX.txt。

那么我们读取图片的名字XXX,存在一个列表里面。然后在这个列表里面用for循环,遍历,然后创建图片的标签的路径,如

# 要移动的图片的完整路径
path_img=os.path.join(input1,flie_name+'.jpg')
# 对应要移动图片的标签的完整路径
 path_lab=os.path.join(input2,flie_name+'.txt')

然后使用移动函数将数据移动到val文件夹中:

# 移动图片到图片的新路径 
shutil.move(path_img,save1)
# 移动对应的标签到标签的新路径
shutil.move(path_lab,save2)

在随机生成列表的过程中我们设置了随机种子,保证数据的可重复实现。

完整代码如下:

import os
import random
import shutil




def moveFile(input1,input2,save1,save2):
    pathDir = os.listdir(input1)  # 取图片的原始路径
    random.seed(1)
    filenumber = len(pathDir)  # 原文件个数
    rate = 0.1  # 抽取的验证集的比例,占总数据的多少
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(pathDir, picknumber)  # 随机选取需要数量的样本图片
    print(sample)
    list_len=len(sample)
    print(list_len)
    list=[]
    for i in range(len(sample)):
        list.append(sample[i].split('.')[0])
    print(list)
    for flie_name in list:
        path_img=os.path.join(input1,flie_name+'.jpg')
        shutil.move(path_img,save1)
        path_lab=os.path.join(input2,flie_name+'.txt')
        shutil.move(path_lab,save2)

if __name__ == '__main__':
    input_path1='./train1200/images/train'
    input_path2= './train1200/labels/train'
    save_img='./train1200/images/val'
    save_lab='./train1200/labels/val'
    if not os.path.exists(save_lab):
        os.makedirs(save_lab)
    if not os.path.exists(save_img):
        os.makedirs(save_img)
    moveFile(input_path1,input_path2,save_img,save_lab)

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值