一、实验准备
实验目的:
- 自己搭建卷积神经网络完成狗猫数据集的分类实验;将关键步骤用汉语注释出来。解释什么是overfit(过拟合)?什么是数据增强?如果单独只做数据增强,精确率提高了多少?然后再添加的dropout层,是什么实际效果?
- 用Vgg19网络模型完成狗猫分类,写出实验结果;
实验环境:
Anaconda3-Jupyter Notebook
TensorFlow&Keras
二、环境配置
实验前需要完成Anaconda的安装
1、插件安装
打开cmd,安装jupyter_contrib_nbextensions库
pip install jupyter_contrib_nbextensions -i https://pypi.douban.com/simple/
输入pip list
可以看到库安装成功
将插件库配置到jupyter
jupyter contrib nbextension install --user --skip-running-check
启动jupyter noteboke
勾选,共11项
2、TensorFlow&Keras
打开jupyter,【New】→【Terminal】
使用以下命令安装TensorFlow和Keras
pip install tensorflow
pip install keras
发现安装很慢,这是默认使用了国外的镜像包
这里我们用豆瓣的镜像
python -m pip install tensorflow -i https://pypi.douban.com/simple
python -m pip install keras -i https://pypi.douban.com/simple
三、猫狗数据集
原始数据集
kaggle网站链接:https://www.kaggle.com/lizhensheng/-2000
度盘链接:https://pan.baidu.com/s/1gLrPcR_mfqJAx_RM-vV_pg
提取码:a118将数据集解压
猫狗数据
分类代码:
import os,shutil
#猫狗原始数据存储位置
original_dataset_dir = 'F:\Pogram\Jupyter\kaggle_Dog&Cat\train'
#处理过后猫狗数据存储位置,并新建目录
base_dir = 'F:\Pogram\Jupyter\kaggle_Dog&Cat\find_cats_and_dogs'
os.mkdir(base_dir)
#创建训练数据,验证数据和测试数据的目录
#采用路径拼接函数os.path.join
train_dir = os.path.join(base_dir, 'train')
os.mkdir(train_dir)
validation_dir = os.path.join(base_dir, 'validation')
os.mkdir(validation_dir)
test_dir = os.path.join(base_dir, 'test')
os.mkdir(test_dir)
#创建猫的训练数据目录
train_cats_dir = os.path.join(train_dir, 'cats')
os.mkdir(train_cats_dir)
#创建狗的训练数据目录
train_dogs_dir = os.path.join(train_dir, 'dogs')
os.mkdir(train_dogs_dir)
#创建猫的验证数据目录
validation_cats_dir = os.path.join(validation_dir, 'cats')
os.mkdir(validation_cats_dir)
#创建狗的验证数据目录
validation_dogs_dir = os.path.join(validation_dir, 'dogs')
os.mkdir(validation_dogs_dir)
#创建猫的测试数据目录
test_cats_dir = os.path.join(test_dir, 'cats')
os.mkdir(test_cats_dir)
#创建狗的测试数据目录
test_dogs_dir = os.path.join(test_dir, 'dogs')
os.mkdir(test_dogs_dir)
#将前1000张猫图像复制到猫的训练数据目录
fnames = ['cat.{}.jpg'.format(i) for i in range(1000)]
for fname in fnames:
src = os.path.join(original_dataset_dir, fname)
dst = os.path.join(train_cats_dir, fname)
shutil.copyfile(src, dst)
#将下500张猫图像复制到猫的验证数据目录
fnames = ['cat.{}.jpg'.format(i) for i in range(1000, 1500)]
for fname in fnames:
src = os.path.join(original_dataset_dir, fname)
dst = os.path.join(validation_cats_dir, fname)
shutil.copyfile(src, dst)
# 将下500张猫图像复制到猫的测试数据目录
fnames = ['cat.{}.jpg'.format(