【python】从原始数据集中抽取作为测试集,统计⽂件夹下的
⽂件个数
python怎么读文件夹下的文件夹背景:由于处理⼩样本学习过程中特别容易出现过拟合现象,有因为是⼩样本,所以⼀般处理⽅法会增强,增强后的数据包含⼤量的相似图像,这时al验证集可能就⽆法起到作⽤,因此需要提前从原始数据中提取⼀部分样本作为测试集。
这⾥要区分以下训练集、验证集以及测试集的概念:
1. 训练集是⽤来训练模型使⽤的数据,
2. 验证集是在训练过程中⽤来迭代验证模型的准确率,这部分数据并不参与训练,但是可以通过这⼀部分数据来检验模型每次迭代准确
率的变化。
3. 测试集是在模型训练完成后,我们进⾏最终测试的数据。和验证集不同的是:验证集和训练集都是在数据增强后分离的,⾃然可能出
现 ⼀张图像经过平移旋转增强到了6张,前五张作为训练集,最后⼀张作为了验证集,由于这6张图像都是从⼀张得到的,存在⾼度相似的情况,所以验证集此时就发挥不出分析模型好坏的作⽤,充当了“卧底”的⾓⾊
先说⼀下如何统计⽂件夹内的数量:
for file in fileNames:
#获取临时的路径
temp_path=os.path.join(pathc, file)
#os.listdir能够获得该路径下的列表,我们在和len()⽅法相结合就能够快速的得到⽂件夹下的数量,
file_count=len(os.listdir(temp_path))
下⾯在说⼀下整体代码主要功能:在原始数据集⽂件夹中,根据每个⼦⽂件夹包括的数量⼤⼩,从中抽取10%作为测试集。
主函数:
if __name__ == "__main__":
#提取到测试⽂件夹⽬录下
patha="/home/scsc/dataset/2000_test"
# 合并图像总的⽂件夹
pathc = "/home/scsc/dataset/rename_2000images"
#遍历当前⽂件夹
fileNames = os.listdir(pathc)
#遍历⼦⽂件夹,获取每个⽂件夹内的图像数量,根据图像数量提取测试图像数
for file in fileNames:
#获取临时的路径
temp_path=os.path.join(pathc, file)
#os.listdir能够获得该路径下的列表,我们在和len()⽅法相结合就能够快速的得到⽂件夹下的数量,
file_count=len(os.listdir(temp_path))
train_size = int(file_count * 0.9)
#获取训练集的⼤⼩
test_size = file_count-train_size
#将⼦⽬录、⽬标⽬录、拷贝的数量作为参数传递到拷贝⽅法中
CopyFile(os.path.join(pathc,file), patha + "/" + file,test_size)
拷贝⽅法:根据size进⾏判断,将选中的⽂件拷贝到指定的测试集⽬录下,操作完成后,移除当前图像,如果size为0则完成当前⽂件夹抽取⼯作
def CopyFile(filepath, newPath,size):
# 获取当前路径下的⽂件名,返回List
fileNames = os.listdir(filepath)
for file in fileNames:
# 将⽂件命加⼊到当前⽂件路径后⾯
newDir = filepath + '/' + file
if size==0:
return
# 如果是⽂件
if os.path.isfile(newDir):
print(newDir)
print(newPath)
#验证⽂件夹是否存在,若不存在则创建⼀个新的⽂件夹
isExists = ists(newPath)
# 判断结果
if not isExists:
# 如果不存在则创建⽬录
os.makedirs(newPath)
#验证图⽚是否正常,若不正常则跳过,不进⾏复制错误图像,并且打印出错误图像的名            img = cv2.imread(newDir)
newFile = newPath +'/'+ file
#如果不是⽂件,递归这个⽂件夹的路径
else:
CopyFile(newDir,newPath)
size = size - 1

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。