视频已拷到硬盘上!
Cats vs. Dogs(猫狗大战)是Kaggle大数据竞赛某一年的一道赛题,利用给定的数据集,用算法实现猫和狗的识别。
数据集可以从Kaggle官网上下载:
https://www.kaggle.com/c/dogs-vs-cats
数据集由训练数据和测试数据组成,训练数据包含猫和狗各12500张图片,测试数据包含12500张猫和狗的图片。
在这里我们只需要训练集,训练集中包括猫狗图像25000张,数据太多了而且猫狗的图像都在一个文件夹中,只于图像的名字区分,很不利于我们制作训练集啊,因此我们写了一个简单的程序从训练集中取1000张图像,并将猫狗分别保存到文件夹内,对了为了方便大家单独新建个文件夹用于保存分类后的图像,可以参考下面代码中的路径。 代码在patition.py中。
import os import shutil
#下载得到的训练集图像 image_path='D://BaiduNetdiskDownload//kaggle//train' #将猫狗分类保存的路径 train_path='D://Python_file//pychart//dog//data'
image_list=os.listdir(image_path) #读取2000张猫狗图像,按照图像名字分别保存 for image_name in image_list[0:2000]: class_name=image_name[0:3] save_path=os.path.join(train_path,class_name) if not(os.path.exists(save_path)): os.mkdir(save_path) file_name=os.path.join(image_path,image_name) save_name=os.path.join(save_path,image_name) shutil.copyfile(file_name,save_name)
2)搭建VGG16神经网络
VGG16 网络由ImageNet数据集训练1000类得到,所有最后一层全连接层输出为1000类,为了实现对猫狗的识别我们将最后一层输出改为2,并对最后的三层全连接层进行训练,所有在下面的VGG16Model.py文件中可以看到,只有最后三层全连接层我们选择了trainable=True。
3)读取训练数据
首先将训练数据分为两类读如list中,并分别给图像添加上标签。然后用tensorflow的队列函数将数据放入队列打乱顺序,并按照设置的batch分批次输出进行训练,最后将标签设置成onehot形式。
代码在loadData.py中。
4)主函数对模型进行训练,并保存模型。模型保存在生成的model文件夹中
代码在model_train.中
5)对训练好的模型测试
6)创建Django项目,编写对应的上传图片的uploadImg.html网页,和上传图片后进行识别反馈的show.html
选择识别图片。
经过后台模型识别后,输出到show.html中