基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)

基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)

  • 一、实验要求
  • 二、实验过程
    • 1. 过拟合与数据增强
    • 2. 基于卷积神经网络的猫狗识别
      • 2.1 准备猫狗数据集
      • 2.2 安装 Tensorflow 与 Keras
      • 2.3 卷积神经网络 CNN
      • 2.4 实验终止,出现无法解决的问题

一、实验要求

  1. 解释过拟合与数据增强
  2. 利用 TensorFlow 和 Keras,自己搭建卷积神经网络完成狗猫数据集的分类实验,如果单独只做数据增强,精确率提高了多少?然后再添加的dropout层,是什么实际效果?

二、实验过程

1. 过拟合与数据增强

  1. 过拟合
    就是太过贴近于训练数据的特征了,在训练集上表现非常优秀,近乎完美的预测/区分了所有的数据,但是在新的测试集上却表现平平,不具泛化性,拿到新样本后没有办法去准确的判断。
  2. 数据增强
    在不实质性的增加数据的情况下,从原始数据加工出更多的表示,提高原数据的数量及质量,以接近于更多数据量产生的价值。其原理是,通过对原始数据融入先验知识,加工出更多数据的表示,有助于模型判别数据中统计噪声,加强本体特征的学习,减少模型过拟合,提升泛化能力。

2. 基于卷积神经网络的猫狗识别

2.1 准备猫狗数据集

数据集可以到 kaggle 官网下载
https://www.kaggle.com/

  1. 下载好后解压,文件目录如下
    基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)_第1张图片

  2. 打开 Jupyter,新建 Python 3

  3. 采用以下代码对数据集进行分类

    这里需要注意代码内的路径

    import os,shutil
    # 下面是数据集 train 所在的目录
    original_dataset_dir='G:/STUDY/3_2AIAndMachineLearning/09/kaggle_Dog&Cat/train'
    # 下面是分类之后文件夹创建的路径
    base_dir='G:/STUDY/3_2AIAndMachineLearning/09/kaggle_Dog&Cat/find_cats_and_dogs'
    os.mkdir(base_dir)
    
    train_dir=os.path.join(base_dir,'train')
    os.mkdir(train_dir)
    validation_dir=os.path.join(base_dir,'validaiton')
    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)
    
    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)
        
    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)
        
    fnames = ['cat.{}.jpg'.format(i) for i in range(1500, 2000)]
    for fname in fnames:
        src = os.path.join(original_dataset_dir, fname)
        dst = os.path.join(test_cats_dir, fname)
        shutil.copyfile(src, dst)
        
    fnames = ['dog.{}.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_dogs_dir, fname)
        shutil.copyfile(src, dst)
    
    fnames = ['dog.{}.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_dogs_dir, fname)
        shutil.copyfile(src, dst)
        
    fnames = ['dog.{}.jpg'.format(i) for i in range(1500, 2000)]
    for fname in fnames:
        src = os.path.join(original_dataset_dir, fname)
        dst = os.path.join(test_dogs_dir, fname)
        shutil.copyfile(src, dst)
    

    结果如下
    基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)_第2张图片
    在目录下创建了一个已经分好类的文件夹

  4. 统计图片数量及分类信息

    print('total training cat images:', len(os.listdir(train_cats_dir)))
    print('total training dog images:', len(os.listdir(train_dogs_dir)))
    print('total validation cat images:', len(os.listdir(validation_cats_dir)))
    print('total validation dog images:', len(os.listdir(validation_dogs_dir)))
    print('total test cat images:', len(os.listdir(test_cats_dir)))
    print('total test dog images:', len(os.listdir(test_dogs_dir)))
    

    结果如下
    基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)_第3张图片
    至此,数据集准备完成

2.2 安装 Tensorflow 与 Keras

注意

  • Tensorflow 与 Keras 的版本必须相匹配,在安装之前必须查询版本匹配信息,版本匹配信息可通过以下链接内容查询
    https://docs.floydhub.com/guides/environments/
  • 本次实现采用的版本为 Tensorflow 1.14.0 与 Keras 2.2.5
  1. 在微软搜索框中搜索 anaconda Prompt (anaconda)
    在这里插入图片描述
    以管理员身份运行该软件
  2. 在控制台中依次输入以下命令来搭建环境、安装 Tensorflow 与 Keras
    conda create -n tensorflow python=3.6
    activate tensorflow
    pip install tensorflow==1.14.0
    pip install keras==2.2.5
  3. 在该控制台中输入以下指令查看安装版本是否成功
    pip show tensorflow
    pip show keras
    若显示如下信息则表示已经安装成功
    基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)_第4张图片

2.3 卷积神经网络 CNN

  1. 导入 Tensorflow 与 keras 包

    import tensorflow as tf
    tf.__version__
    
    import keras
    keras.__version__
    

    出现问题
    基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A)_第5张图片

2.4 实验终止,出现无法解决的问题

  • anaconda Prompt (anaconda) 中可以正确下载 Tensorflow 与 Keras,但无法导入
  • 更换更新的 Tensorflow 与 Keras 版本,此时采用 Tensorflow 2.2.0 与 Keras 2.3.1,此时可以正确导入 Tensorflow 包,但是导入 Keras 是仍然报错,显示版本不匹配,但已经按照版本匹配信息进行下载,版本匹配没有问题,目前无法解决其报错

你可能感兴趣的:(基于卷积神经网络的猫狗识别(实验-人工智能与机器学习A))