机器学习-k折交叉验证法(python实现)

        看了网上的很多k-fold的程序,发现都是机器学习方面的数据操作,而非文件操作(一位不愿意透露姓名的资深大冤种本着“能花钱就不动脑”的原则还付费了几个程序,全是bug,我真的会谢)。 

机器学习-k折交叉验证法(python实现)_第1张图片

        然后自己写了一个k-fold的程序,我的数据集是只有两个labels,并且是yolo格式做的标注,所以程序也是按照yolo的文件格式进行编写的,文件夹路径和picknumbers大家可以自己调。注:picknumbers我没有采用int(),因为可能会产生errors(比如你的数据集规模不能整除之类的),所以直接手动指定了具体数值。

        程序应该是完全自动化的,只要自己创建好源文件夹以及吧图片和labels放进去就可以了,目标文件夹用mkdir()自动创建。

        把main里面的for循环去掉,去掉rate的注释部分,就可以当留出法来用了。

import os, random, shutil
def copy_img_File(img0_file_Dir,txt0_file_Dir,img1_file_Dir,txt1_file_Dir):
    label0_pathDir = os.listdir(img0_file_Dir)    #取图片的原始路径
    label1_pathDir = os.listdir(img1_file_Dir)    #取图片的原始路径
    # filenumber=len(pathDir)
    # rate=0.1    #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    label0_picknumber=30
    label1_picknumber=6
    sample_label0 = random.sample(label0_pathDir, label0_picknumber)  #随机选取picknumber数量的样本图片
    sample_label1 = random.sample(label1_pathDir, label1_picknumber)  #随机选取picknumber数量的样本图片
    # print (sample)
    for name in sample_label0:
            shutil.copy(img0_file_Dir + name, k_fold_img_tar_Dir + name)
            os.remove(img0_file_Dir + name)
            shutil.copy(txt0_file_Dir + name[0:7] + '.txt', k_fold_txt_tar_Dir + name[0:7] + '.txt')
            os.remove(txt0_file_Dir + name[0:7] + '.txt')
    for name in sample_label1:
            shutil.copy(img1_file_Dir + name, k_fold_img_tar_Dir + name)
            os.remove(img1_file_Dir + name)
            shutil.copy(txt1_file_Dir + name[0:7] + '.txt', k_fold_txt_tar_Dir + name[0:7] + '.txt')
            os.remove(txt1_file_Dir + name[0:7] + '.txt')
    return

if __name__ == '__main__':
    img0_file_Dir = "./ORimg0/"  # 源图片文件夹路径
    txt0_file_Dir = "./ORtxt0/"
    img1_file_Dir = "./ORimg1/"  # 源图片文件夹路径
    txt1_file_Dir = "./ORtxt1/"
    for i in range(10):
        os.mkdir('./Tar_img{}'.format(i))
        os.mkdir('./Tar_txt{}'.format(i))
        k_fold_img_tar_Dir = './Tar_img{}/'.format(i)  # 移动到新的文件夹路径
        k_fold_txt_tar_Dir = './Tar_txt{}/'.format(i)  # 移动到新的文件夹路径
        copy_img_File(img0_file_Dir, txt0_file_Dir, img1_file_Dir, txt1_file_Dir)

你可能感兴趣的:(深度学习,python,机器学习)