赞
踩
深度学习时,往往需要划分训练集、测试集以及验证集。在之前,我已经介绍了利用keras中的ImageDataGenerator方法实现数据集的划分。但是原文件夹中的数据,并没有真正的划分到两个文件夹中。这次介绍的这个方法,可以按照一定的比例或者数量将数据从一个文件夹移动到另一个文件夹。
如下所示的文件夹:一共有24个子文件夹
每个文件夹中有500张左右的图片。
import os, random, shutil
def moveFile(fileDir, tarDir):
pathDir = os.listdir(fileDir) # 取图片的原始路径
filenumber = len(pathDir)
rate = 0.2 # 抽取图片的比例,自己定义即可
picknumber = int(filenumber * rate) # 所抽取图片的数量
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
for name in sample:
shutil.move(fileDir + name, tarDir + name)
if __name__ == '__main__':
fileDir = "E:/tmp/.keras/datasets/gestures/" # 源图片文件夹路径,这是一级文件夹,里面的二级文件夹中包含着图片,如上图所示。
tarDir = "E:/tmp/.keras/datasets/gestures_test/" # 移动到新的文件夹路径,这里也是一级文件夹,二级文件夹存在与否无所谓
for oneDir in os.listdir(fileDir):
onefileDir = fileDir + oneDir + "/" # 源文件夹的二级文件夹
onetarDir = tarDir + oneDir + "/" # 移动文件夹的二级文件夹
# 判断移动文件夹中的二级文件夹是否存在,不存在则创建
if not os.path.exists(onetarDir):
os.makedirs(onetarDir)
moveFile(onefileDir, onetarDir)
划分结果如下所示:
起初移动文件夹是没有二级文件夹的,现已建好。
每个文件夹中有之前文件夹中的20%的数据。
其实按照数量划分的原理与按照比例划分的原理类似,只不过是按照原理划分时,需要按照比例计算移动的数量,而按照数量划分直接规定好了数量。
import os, random, shutil
def moveFile(fileDir, tarDir):
pathDir = os.listdir(fileDir) # 取图片的原始路径
picknumber = 200 # 所抽取图片的数量
sample = random.sample(pathDir, picknumber) # 随机选取picknumber数量的样本图片
for name in sample:
shutil.move(fileDir + name, tarDir + name)
if __name__ == '__main__':
fileDir = "E:/tmp/.keras/datasets/gestures/" # 源图片文件夹路径,这是一级文件夹,里面的二级文件夹中包含着图片,如上图所示。
tarDir = "E:/tmp/.keras/datasets/gestures_test/" # 移动到新的文件夹路径,这里也是一级文件夹,二级文件夹存在与否无所谓
for oneDir in os.listdir(fileDir):
onefileDir = fileDir + oneDir + "/" # 源文件夹的二级文件夹
onetarDir = tarDir + oneDir + "/" # 移动文件夹的二级文件夹
# 判断移动文件夹中的二级文件夹是否存在,不存在则创建
if not os.path.exists(onetarDir):
os.makedirs(onetarDir)
moveFile(onefileDir, onetarDir)
划分结果如下所示,之前已有103张图片,再次划分过200张,共303张:
努力加油a啊
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。