美文网首页
文件夹下子文件训练集、测试集划分

文件夹下子文件训练集、测试集划分

作者: Janeshurmin | 来源:发表于2019-11-27 16:23 被阅读0次

文件夹dataset下有cat、dog..等N个子文件夹,每个子文件夹下有N个bin文件,现在划分cat子文件夹的文件成训练集、测试集和验证集,并保存到指定文件目录。

import os
import random
import shutil

def fileCopy(fileName, srcPath, dstPath):
    #若文件夹存在,删除,新建文件夹
    if os.path.exists(dstPath):
        shutil.rmtree(dstPath)
    os.makedirs(dstPath)
    #将文件从src文件夹移动到dst文件夹
    for i in fileName:
        srcFile = os.path.join('%s%s' % (srcPath, i))
        dstFile = os.path.join('%s%s' % (dstPath, i))
        shutil.copy(srcFile, dstFile)

#统计所有文件的数量
def sumFiles(root):
    files = []
    classes = os.listdir(root)
    for i, c in enumerate(classes):
        new_files = [os.path.join(root, c, f) for f in os.listdir(os.path.join(root, c))]
        files += new_files
    print('{}个类, 所有类所有数据总和:{}'.format(len(classes), len(files)))


if __name__ == '__main__':
    fileName = "cat/" #待划分数据集的文件名
    root = "/dataset/"
    filePath =  root + fileName #待划分数据集文件地址
    trainPath = "/data/training/" #划分后的训练集地址
    testPath = "/data/testing/"
    validPath = "/data/validation/"

    sumFiles(root)

    allFile = os.listdir(filePath) #原始数据name list,某类的数据
    random.shuffle(allFile)
    trainName = allFile[0:int(0.6 * len(allFile))] # 随机切分7:3, 6:2:2
    testName = allFile[int(0.6 * len(allFile)):int(0.8 * len(allFile))]
    validName = allFile[int(0.8 * len(allFile)):]
    print("train:{}, test:{}, validation:{}".format(len(trainName), len(testName), len(validName)))

    #分别将训练和测试文件移动到指定文件夹
    fileCopy(trainName, filePath, trainPath)
    fileCopy(testName, filePath, testPath)
    fileCopy(validName, filePath, validPath)




相关文章

网友评论

      本文标题:文件夹下子文件训练集、测试集划分

      本文链接:https://www.haomeiwen.com/subject/rmnpwctx.html