数据集下载地址:
链接:https://pan.baidu.com/s/1tJQIY0ob2EyQn3cDipPkow?pwd=7gch
提取码:7gch
猫狗数据集的分为训练集25000张,在训练集中猫和狗的图像是混在一起的,pytorch读取数据集有两种方式,第一种方式是将不同类别的图片放于其对应的类文件夹中,另一种是实现读取数据集类,该类继承torch.utils.Dataset,并重写__getitem__和__len__。
先将猫和狗从训练集中区分开来,分别放到dog和cat文件夹下
import os
file_dir = r"E:\development_file\jupyter_notebook\pytorch\data\dogs-vs-cats\train"
path = r"E:\development_file\jupyter_notebook\pytorch\data\dogs-vs-cats"
#将某类图片移动到该类的文件夹下
def img_to_file(path):
print("=========开始移动图片============")
#如果没有dog类和cat类文件夹,则新建
if not os.path.exists(path+"/dog"):
os.makedirs(path+"/dog")
if not os.path.exists(path+"/cat"):
os.makedirs(path+"/cat")
file_name_list = os.listdir(file_dir)
print("共:{}张图片".format(len(file_name_list)))
for imgName in file_name_list:
# 去除后缀
img = imgName.replace(".jpg","")
#将图片移动到指定的文件夹中
if img.split(".")[0] == "cat":
shutil.move(file_dir+"\\"+imgName,path+"\\cat")
if img.split(".")[0] == "dog":
shutil.move(file_dir+"\\"+imgName,path+"\\dog")
print("=========移动图片完成============")
img_to_file(path)
然后从dog中和cat中分别抽取1250张,共2500张图片作为测试集。
import random
train_path = r"E:\development_file\jupyter_notebook\pytorch\data\catsdogs\train"
test_path = r"E:\development_file\jupyter_notebook\pytorch\data\catsdogs\val"
def split_train_test(fileDir,tarDir):
if not os.path.exists(tarDir):
os.makedirs(tarDir)
pathDir = os.listdir(fileDir) #取图片的原始路径
filenumber=len(pathDir)
rate=0.1 #自定义抽取图片的比例,比方说100张抽10张,那就是0.1
picknumber=int(filenumber*rate) #按照rate比例从文件夹中取一定数量图片
sample = random.sample(pathDir, picknumber) #随机选取picknumber数量的样本图片
print("=========开始移动图片============")
print("移动了:"+str(picknumber)+"张")
for name in sample:
shutil.move(fileDir+name, tarDir)
print("=========移动图片完成============")
split_train_test(train_path+'\\dog\\',test_path+'\\dog\\')
split_train_test(train_path+'\\cat\\',test_path+'\\cat\\')