最近一直在撸猫,为了猫主子的事情忧三愁四,皱纹多了不少,头发也掉了好几根,神态也多了几分忧郁,唯一不变的还是那份闲鱼的懒散和浪荡的心。
要说到深度学习图像分类的经典案例之一,那就是猫狗大战了。猫和狗在外观上的差别还是挺明显的,无论是体型、四肢、脸庞和毛发等等, 都是能通过肉眼很容易区分的。
那么如何让机器来识别猫和狗呢?这就需要使用卷积神经网络来实现了。
网上已经有不少人写过这案例了,我也来尝试下练练手。
完整代码:https://github.com/ADlead/Dogs-Cats.git
一. 数据集的准备
猫狗照片的数据集直接从kaggle官网(https://www.kaggle.com/c/dogs-vs-cats)下载即可,下载后解压,可以看到有训练集和测试集
train文件夹内容如下:
test1文件夹内容如下:
编写代码将图片存储成batch文件
import cv2 as cv
import os
import numpy as np
import random
import pickle
import time
start_time = time.time()
data_dir = './data'
batch_save_path = './batch_files'
# 创建batch文件存储的文件夹
os.makedirs(batch_save_path, exist_ok=True)
# 图片统一大小:100 * 100
# 训练集 20000:100个batch文件,每个文件200张图片
# 验证集 5000:一个测试文件,测试时 50张 x 100 批次
# 进入图片数据的目录,读取图片信息
all_data_files = os.listdir(os.path.join(data_dir, 'train/'))
# print(all_data_files)
# 打算数据的顺序
random.shuffle(all_data_files)
all_train_files = all_data_files[:20000]
all_test_files = all_data_files[20000:]
train_data = []
train_label = []
train_filenames = []
test_data = []
te