一、数据集下载
kaggle官网上提供猫狗识别数据集的下载,但是要翻墙,这里提供网盘保存。
链接:https://pan.baidu.com/s/1-0eBeAyE5i4TMiNS8CQcVQ
提取码:31sc
训练数据包含猫和狗各12500张图片,测试数据包含12500张猫和狗的图片。
二、打标签
代码的逻辑如下:
-
给数据集打标签,猫为0,狗为1。
首先通过*listdir(path)*
获取该路径下图片名称,
再通过*split*
切分名称,
判断切分出来的第一个元素是cat还是dog,
如果是cat,就组合路径和file,得到一个完整的图片路径,获取图片,用*append*
函数将0加到label中
如果是dog,组合路径和file,得到一个完整的图片路径,获取图片,用*append*
函数将1加到label中 -
为了提高训练模型的精度,要把数据集顺序打乱。
用*hstack*
将cats,dogs水平拼接,放到image_list,label_cats和dog_cats拼接,放到label_list
数据集中有12500张猫,12500张狗,拼接后的image_list和label_list长度都为25000
存到temp中,此时temp的形状为2x25000,对temp转置后形状为25000x2,shuffle
后打乱image_list和label_list
为什么要转置后才shuffle?
因为转置之前只有两行,shuffle
只是把image_list和label_list的上下顺序颠倒,对图片和标签来说么有变化
转置后把图片和标签一一对应生成25000行的数组,再shuffle就可以将这25000行的顺序打乱。第一列是image_list,第二列是label_list
例如:
a=[1,2,3,4,5]
b=[2,1,3,5,3]
c=np.array([a,b])
c=np.transpose(c)
np.random.shuffle(c)
输出:
c=[[4 5]
[5 3]
[2 1]
[1 2]
[3 3]]
具体实现代码如下:
import os
import numpy as np