失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > cats-and-dogs 猫狗识别 自己分割数据为训练集和测试集 并利用Tensorflow进行模型

cats-and-dogs 猫狗识别 自己分割数据为训练集和测试集 并利用Tensorflow进行模型

时间:2019-01-17 22:00:32

相关推荐

cats-and-dogs 猫狗识别 自己分割数据为训练集和测试集 并利用Tensorflow进行模型

注:本文应用Tensorflow2.9.1,python3.10

若原始数据集为dogs,和cats 两个文件夹,可进行自动划分数据集为训练集train_data(子文件cats,dogs),测试集test_data(子文件cats,dogs)

分割数据集用到的库shutil,random,os

--shutil:模块提供了一系列对文件和文件集合的高阶操作。 特别是提供了一些支持文件拷贝和删除的函数。

--shutil.copyfile(src,dst) 将源目录中的文件拷贝到路径dst下,dst必须是完整的目标文件名,如果dst已经存在,它将被替换

--shutil.rmtree(path) 删除指定的path目录

--os.mkdir(path) 创建一个名为path的目录

--os.makedirs(path) 递归创建目录path ,会自动创建到达最后一级的中间目录

--os.listdir(path)返回一个包含由path指定目录中条目名称组成的列表。 该列表按任意顺序排列,并且不包括特殊条目'.''..'

random.sample(population,k) 返回从总体序列或集合中选择的唯一元素的k长度列表。 用于无重复的随机抽样。

1 查看源数据,数据下载可参考【/8XWRZ】,若下载的数据已经被划分为训练集和测试集,想要自己划分的话可自己合并各个类别的所有数据然后自己划分。

查看cats 和dogs 分别有多少张图片

import osprint(len(os.listdir('E:/machine learning data/cats-dogs-images/cats'))) #查看cats数据一共有多少张图片print(len(os.listdir('E:/machine learning data/cats-dogs-images/dogs')))

2创建文件夹存放训练集和测试集

try:os.mkdir('E:/machine learning data/cat-dog') #在路径'E:/machine learning data/'下创建文件名为cat-dog的文件os.mkdir('E:/machine learning data/cat-dog/training')os.mkdir('E:/machine learning data/cat-dog/testing')os.mkdir('E:/machine learning data/cat-dog/training/cats')os.mkdir('E:/machine learning data/cat-dog/training/dogs')os.mkdir('E:/machine learning data/cat-dog/testing/cats')os.mkdir('E:/machine learning data/cat-dog/testing/dogs')except OSError:pass

3 分割数据

#分割原始数据为训练集和测试集import shutilimport randomdef split_data(source,training,testing,split_size): #参数分别为cats或者dogs源目录,训练集目录,测试集目录,划分比例files=[] #临时列表容器存放遍历的文件名for filename in os.listdir(source): #将遍历的非空文件追加到filesfile=source+filenameif os.path.getsize(file)>0:files.append(filename)else:print(filename+'is zero,so ingoring')training_length=int(len(files)*split_size)testing_length=int(len(files)-training_length)shuffled_set=random.sample(files,len(files)) #返回随机采样的长度为len(files)的列表trainging_set=shuffled_set[0:training_length] #随机选取training_length张图片为训练集testing_set=shuffled_set[-testing_length:]for filename in trainging_set:this_file=source+filenamedestination=training+filenameshutil.copyfile(this_file,destination) #copyfile(src,dst),dst必须是完整的目标文件名,从src复制到dst;copy(src,dst),dst可以为目录名for filename in testing_set:this_file=source+filenamedestination=testing+filenameshutil.copyfile(this_file,destination)cat_source_dir='E:/machine learning data/cats-dogs-images/cats/' #cats数据源目录training_cats_dir='E:/machine learning data/cat-dog/training/cats/'testing_cats_dir='E:/machine learning data/cat-dog/testing/cats/'dog_source_dir='E:/machine learning data/cats-dogs-images/dogs/' #dogs数据源目录training_dogs_dir='E:/machine learning data/cat-dog/training/dogs/'testing_dogs_dir='E:/machine learning data/cat-dog/testing/dogs/'#确认前面是否建立了训练集和测试集的子目录def create_dir(file_dir):if os.path.exists(file_dir):print('true')shutil.rmtree(file_dir)#删除目录#os.makedirs(file_dir)#重建目录,makedirs自动创建到达最后一级目录所需要的中间目录os.mkdir(file_dir)else:os.mkdir(file_dir)create_dir(training_cats_dir)create_dir(testing_cats_dir)create_dir(training_dogs_dir)create_dir(testing_dogs_dir)split_size=0.9split_data(cat_source_dir,training_cats_dir,testing_cats_dir,split_size) #开始分割cats数据集split_data(dog_source_dir,training_dogs_dir,testing_dogs_dir,split_size) #开始分割dogs数据集

4查看分割后的数据

#查看分割后的数据import numpy as npfrom PIL import Imageprint(len(os.listdir(training_cats_dir)))print(len(os.listdir(testing_cats_dir)))print(len(os.listdir(training_dogs_dir)))print(len(os.listdir(testing_dogs_dir)))img=Image.open("E:/machine learning data/cat-dog/training/cats/0.1.jpeg") #打开一张图片看其大小print(img.size)

5 模型构建及预测可参考【/DI4a4】和【/9BOXR】

这是作者的学习笔记,在此分享,仅供参考。因为作者水平有限,如有疏漏之处,还望批评指正。

cats-and-dogs 猫狗识别 自己分割数据为训练集和测试集 并利用Tensorflow进行模型构建并预测自己准备的数据

如果觉得《cats-and-dogs 猫狗识别 自己分割数据为训练集和测试集 并利用Tensorflow进行模型》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。