上一篇博客中,介绍了数据集的下载,现在开始下一个阶段,撸代码啦。
(注:发现github上一处可以数据,并且有代码,不过库函数更新的太快啦,有时候download的项目是不能直接跑起来的,所以我们需要进行微调。https://github.com/maples1993/Cats_vs_Dogs
https://github.com/gzshan/dogsVScats
我们下载得到的数据集如下:
下载得到的数据,有2个压缩包,我们将他们进行解压,得到test1文件夹和train文件夹,
其中test1文件夹下:
既有猫也有狗的图片,图片的命名是有顺序阿拉伯数字。
在train文件夹下:
属于猫的类别图片命名:cat+数字
属于狗的类别图片命名:dog+数字
我们只需要train文件夹中的数据即可。
首先,我们新建一个Dataset文件夹,将train中的图片都拷贝进去,
然后,再新建train和val文件夹,在这两个文件夹下,分别新建cat和dog文件夹
像这样的目录结构:
编写数据分类代码:preprocess_data.py
其中90%的数据当做训练集,10%的数据当做测试集
# -*- coding: utf-8 -*-
import os
import shutil # 用来移动图片的库,直接移走
def preprocess_data():
data_file = os.listdir('data/Dataset') # 读取所有图片的名字
#print(len(data_file)) # 查看数据大小
# 将图片名为cat和dog的图片分别取出来,存为两个list
cat_file = list(filter(lambda x:x[:3]=='cat',data_file))
dog_file = list(filter(lambda x:x[:3]=='dog',data_file))
data_root = 'data/'
train_root = 'data/train'
val_root = 'data/val'
for i in range(len(cat_file)):
print(i)
pic_path = data_root + 'Dataset/' + cat_file[i]
if i < len(cat_file)*0.9:
obj_path = train_root + '/cat/' + cat_file[i]
else:
obj_path = val_root + '/cat/' + cat_file[i]
shutil.move(pic_path,obj_path)
for j in range(len(dog_file)):
print(j) # 查看进度
pic_path = data_root + 'Dataset/' + dog_file[j]
if j < len(dog_file)*0.9:
obj_path = train_root + '/dog/' + dog_file[j]
else:
obj_path = val_root + '/dog/' + dog_file[j]
shutil.move(pic_path,obj_path)
# 程序运行接口,调用函数
if __name__ == '__main__':
preprocess_data()
运行程序
我们的train下的cat文件夹和dog文件夹
val下的cat文件夹和dog文件夹
就会移入相应的图片。
等项目结束,我会把所有代码放在Github上。
记录学习的过程,让知识共享。