目录

1 简介

在本节中,我们将学习如何使用卷积神经网络,并使用更大的数据集,这有助于避免过度拟合的问题!

2 使用更大的数据集进行训练-猫和狗

在之前的实验中,训练了一个马与人类数据的分类器。尽管在训练集上获得了很好的训练结果,但是当我们尝试用真实图像进行分类时,存在许多错误,主要是由于过度拟合–CNN在见过的数据方面表现非常好。

3 导入库

import os
import zipfile
import random
import tensorflow as tf
from tensorflow.keras.optimizers import RMSprop
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from shutil import copyfile

4 获取数据

local_zip = "./cats-and-dogs.zip"
zip_ref = zipfile.ZipFile(local_zip,"r")
zip_ref.extractall("cats-and-dogs")
zip_ref.close()
print(len(os.listdir("./cats-and-dogs/PetImages/Cat/")))
print(len(os.listdir("./cats-and-dogs/PetImages/Dog/")))
12501
12501

5 准备数据

def split_data(SOURCE,TRAINING,TESTING,SPLIT_SIZE):files = []for filename in os.listdir(SOURCE):file = SOURCE + filenameif os.path.getsize(file) > 0:files.append(filename)else:print(filename+" is zero length,so ignoring.")training_length = int(len(files)*SPLIT_SIZE)testing_length = int(len(files)-training_length)shuffled_set = random.sample(files,len(files))training_set = shuffled_set[0:training_length]testing_set = shuffled_set[:testing_length]for filename in training_set:this_file = SOURCE + filenamedestination = TRAINING + filenamecopyfile(this_file, destination)for filename in testing_set:this_file = SOURCE + filenamedestination = TESTING + filenamecopyfile(this_file, destination)CAT_SOURCE_DIR = "./cats-and-dogs/PetImages/Cat/"
TRAINING_CATS_DIR = "./cats-v-dogs/training/cats/"
TESTING_CATS_DIR = "./cats-v-dogs/testing/cats/"
DOG_SOURCE_DIR = "./cats-and-dogs/PetImages/Dog/"
TRAINING_DOGS_DIR = "./cats-v-dogs/training/dogs/"
TESTING_DOGS_DIR = "./cats-v-dogs/testing/dogs/"split_size = .9
split_data(CAT_SOURCE_DIR, TRAINING_CATS_DIR, TESTING_CATS_DIR, split_size)
split_data(DOG_SOURCE_DIR, TRAINING_DOGS_DIR, TESTING_DOGS_DIR, split_size)
666.jpgis zero length,so ignoring.
11702.jpgis zero length,so ignoring.
print(len(os.listdir('./cats-v-dogs/training/cats/')))
print(len(os.listdir('./cats-v-dogs/training/dogs/')))
print(len(os.listdir('./cats-v-dogs/testing/cats/')))
print(len(os.listdir('./cats-v-dogs/testing/dogs/')))
11250
11250
1250
1250

6 定义模型

model = tf.keras.models.Sequential([tf.keras.layers.Conv2D(16,(3,3),activation="relu",input_shape=(150,150,3)),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Conv2D(32,(3,3),activation="relu"),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Conv2D(64,(3,3),activation="relu"),tf.keras.layers.MaxPooling2D(2,2),tf.keras.layers.Flatten(),tf.keras.layers.Dense(512,activation="relu"),tf.keras.layers.Dense(1,activation="sigmoid")
])
WARNING:tensorflow:From D:\software\Anaconda\anaconda\lib\site-packages\tensorflow\python\ops\resource_variable_ops.py:435: colocate_with (from tensorflow.python.framework.ops) is deprecated and will be removed in a future version.
Instructions for updating:
Colocations handled automatically by placer.
model.compile(optimizer=RMSprop(lr=0.0001),loss="binary_crossentropy",metrics=["acc"])

7 训练模型

TRAINING_DIR = "./cats-v-dogs/training/"
train_datagen = ImageDataGenerator(rescale=1.0/255.)
train_generator = train_datagen.flow_from_directory(TRAINING_DIR,batch_size=100,class_mode="binary",target_size=(150,150))
VALIDATION_DIR = "./cats-v-dogs/testing/"
validation_datagen = ImageDataGenerator(rescale=1.0/255.)
validation_generator = validation_datagen.flow_from_directory(VALIDATION_DIR,batch_size=100,class_mode='binary',target_size=(150, 150))
Found 22498 images belonging to 2 classes.
Found 2500 images belonging to 2 classes.
history = model.fit_generator(train_generator,epochs=15,verbose=1,validation_data=validation_generator)
Epoch 1/1537/225 [===>..........................] - ETA: 5:53 - loss: 0.6875 - acc: 0.5338
Epoch 13/15
25/25 [==============================] - 16s 643ms/step - loss: 0.2902 - acc: 0.8780
225/225 [==============================] - 390s 2s/step - loss: 0.3139 - acc: 0.8636 - val_loss: 0.2902 - val_acc: 0.8780
Epoch 14/15
25/25 [==============================] - 16s 640ms/step - loss: 0.2689 - acc: 0.8864
225/225 [==============================] - 390s 2s/step - loss: 0.2978 - acc: 0.8698 - val_loss: 0.2689 - val_acc: 0.8864
Epoch 15/15
25/25 [==============================] - 16s 641ms/step - loss: 0.2471 - acc: 0.8952
225/225 [==============================] - 390s 2s/step - loss: 0.2840 - acc: 0.8797 - val_loss: 0.2471 - val_acc: 0.8952

8 探索数据集

%matplotlib inline
import matplotlib.image  as mpimg
import matplotlib.pyplot as plt
#-----------------------------------------------------------
# Retrieve a list of list results on training and test data
# sets for each training epoch
#-----------------------------------------------------------
acc=history.history['acc']
val_acc=history.history['val_acc']
loss=history.history['loss']
val_loss=history.history['val_loss']epochs=range(len(acc)) # Get number of epochs#------------------------------------------------
# Plot training and validation accuracy per epoch
#------------------------------------------------
plt.plot(epochs, acc, 'r', "Training Accuracy")
plt.plot(epochs, val_acc, 'b', "Validation Accuracy")
plt.title('Training and validation accuracy')
plt.figure()#------------------------------------------------
# Plot training and validation loss per epoch
#------------------------------------------------
plt.plot(epochs, loss, 'r', "Training Loss")
plt.plot(epochs, val_loss, 'b', "Validation Loss")
plt.figure()
<Figure size 432x288 with 0 Axes>

<Figure size 432x288 with 0 Axes>

TensorFlow(keras)入门课程--06 CNN用于猫狗数据集相关推荐

  1. TensorFlow(keras)入门课程--03 卷积介绍

    目录 1 简介 2 使用卷积 3 开始编码 4 创建卷积 5 查看结果 6 了解池化 7 编写池化代码 1 简介 在本节中,你将了解卷积以及它们在计算机视觉场景中如此强大的原因. 在上一节中,我们了解 ...

  2. tensorflow.keras入门1

    tensorflow.keras入门1-基本函数介绍 目前keras API 已经整合到 tensorflow中,在tensorflow中通过tf.keras就可以调用keras. import te ...

  3. 基于卷积神经网络(CNN)的猫狗识别

    目录 引言 1.什么是卷积神经网络? 1.1什么是神经网络? 1.2什么是卷积? 2.准备工作 2.1一些知识: 2.2keras 2.3Conv2D 2.4 MaxPooling2D 3.基于卷积神 ...

  4. 基于卷积神经网络 CNN 的猫狗识别详细过程

    目录 一.卷积神经网络(CNN) 1.1 卷积 1.2 前馈神经网络 1.3 卷积神经网络(CNN) 二.配置环境 三.猫狗数据分类建模 3.1 猫狗图像预处理 3.2 猫狗分类的实例--基准模型 3 ...

  5. 初学者友好项目 - 使用 CNN 的猫狗分类 ​

    使用CNN进行猫狗分类 卷积神经网络 (CNN) 是一种算法,将图像作为输入,然后为图像的所有方面分配权重和偏差,从而区分彼此.神经网络可以通过使用成批的图像进行训练,每个图像都有一个标签来识别图像的 ...

  6. TensorFlowKeras入门猫狗数据集识别

    一.CNN卷积网络神经介绍 1.卷积神经网络结构介绍 如果用全连接神经网络处理大尺寸图像具有三个明显的缺点: (1)首先将图像展开为向量会丢失空间信息: (2)其次参数过多效率低下,训练困难: (3) ...

  7. keras笔记(3)-猫狗数据集上的训练以及单张图片多张图片的测试

    之前也写过关于使用tensorflow在猫狗数据集上的训练,想要学习的可以看一下 数据集下载 猫狗数据集:https://pan.baidu.com/s/13hw4LK8ihR6-6-8mpjLKDA ...

  8. CNN神经网络猫狗分类经典案例

    AI:CNN神经网络猫狗分类经典案例 猫狗的训练数据可以在kaggle下载: https://www.kaggle.com/tongpython/cat-and-dog/data 本例使用ImageD ...

  9. 【飞桨】卷积神经网络(CNN)实现猫狗分类

    目录 什么是卷积神经网络? 一.数据准备 二.网络配置 1. 定义网络 2. 定义输入数据的格式 3. 定义损失函数和准确率 4. 定义优化方法 三.模型训练&评估 四.模型预测 五.完整代码 ...

最新文章

  1. 毕业生实名举报导师剽窃其论文发表:复制比达 90%,导师已道歉
  2. mysql学习二:sql语句分类
  3. python语言培训班-学python培训班需要多久?深圳Python培训
  4. fmt.Println、fmt.Printf、fmt.Sprintf、fmt.Sprintln
  5. 第三章 可扩展标记语言XML
  6. Django 学习笔记第一课
  7. 趣文:如果编程语言是车
  8. 【历史上的今天】8 月 13 日:Oracle 起诉 Google,Java 版权案正式开启!
  9. 手机游戏再造创业神话 80后月入过百万
  10. CC***的解决方案
  11. 基于51单片机的电子秤设计
  12. 轴承系统动力学模型matlab程序代码
  13. 大数据产品推荐:Stratifyd大数据智能分析平台
  14. R语言--Cox模型校准曲线原理(二)算法
  15. 菜鸟好文推荐(七)——他改了密码,姑娘说了“Yes, I do”
  16. 互联网金融的分类监管主体
  17. TI-C2000-捕获模块ECAP应用-以欧姆龙E6B2-CWZ6C测速编码器为例
  18. Telephone--短信发送/接收流程
  19. Anaconda中GPU版本Pytorch 的whl 安装方法【2023.1最新最详细】(附anaconda以及cudacudnn安装教程)
  20. 时寒冰:中国房价下跌序幕刚刚拉开

热门文章

  1. 视频播放相关的网络协议
  2. 【转】Pandas 基础练习(二) —— 数据条件选择与排序!
  3. 安装3dsMax出现1603怎么办
  4. P2P如何助力音视频传输,彻底熟悉P2P丨NAT的作用丨网络穿透原理到实战
  5. php分页无极类的讲解_一个完美php分页类,推荐给大家
  6. P2P301 项目软件总结
  7. Linux 查看负载内存
  8. 5G NR 下行调度算法流程
  9. java web 过滤器 拦截器 监听器_Java中的拦截器和过滤器,可不是同一个东西
  10. dataframe常用操作_Pandas模块基础及常用方法