小牛的学习笔记---CNN模型之猫狗识别

这篇博客介绍了如何使用CNN模型进行猫狗识别。首先讲解了CNN模型的结构,包括输入层、卷积层、池化层和平坦层。接着,通过Keras库展示了猫狗识别的实例,包括数据集的组织、数据预处理和提升、模型构建、训练过程。最后讨论了Dropout在防止过拟合中的作用。
摘要由CSDN通过智能技术生成

CNN模型

关于CNN模型的讲解,推荐刘建平的卷积神经网络(CNN)模型结构

划重点:
CNN的优势:可以抽取矩阵形式中隐藏的离散的模式信息
输入层—>卷积层—>池化层—>平坦层
卷积层和池化层不停叠加,若干卷积层+池化层的组合
卷积层没有激活函数
卷积之后会减小维度
给出的链接卷积中的例子相当优秀
池化层将矩阵的多个元素变成一个,标准如下:
池化标准有2个,MAX或者是Average。即取对应区域的最大值或者平均值作为池化后的元素值。
原图切边,但是仍保留了图片的关键信息,每次卷积核池化都会产生新的图片

CNN实例

猫狗识别

1.导包

keras面向小数据集的图像分类,本文需要使用的keras模块有:
fit_generator:用于从python生成器中训练网络
ImageDataGenerator:用于实时数据提升
层参数冻结和模型fine-tune

from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Convolution2D, MaxPooling2D
from keras.layers import Activation, Dropout, Flatten, Dense
import numpy as np

2.数据集

这里有2000张训练图片构成的数据集,一共两个类别:猫、狗,每类1000张
数据集要按照以下方式存放
data/
train/
dogs/
dog001.jpg
dog002.jpg

cats/
cat001.jpg
cat002.ipg

validation/
dogs/
dog001.jpg
dog002.jpg

cats/
cat001.jpg
cat002.jpg

train放训练图片
validation放验证图片
这里我们只取了各个类的前1000张图片,另外从各个类中取了400张额外图片用于测试
数据预处理和数据提升
为了尽量利用我们有限的训练数据,我们将通过一系列随机变换对数据进行提升,这样我们的模型将看不到任何两张完全相同的图片,这样有利于我们抑制过拟合,使得模型的泛化能力更好。
在keras中,这个步骤可以通过keras.preprocessing.imageGenerator来实现
在训练过程中,设置要实行的随机变换,通过.flow或.flow_from_directory(directory)方法实例化一个针对图片batch的生成器,这些生成器可以被用作keras模型相关方法的输入,如fit_generator,evaluate_generator和predict_generator
这里看个例子,明白图片的一些相关操作
在这里插入图片描述
在这里插入图片描述

img_width, img_height = 150, 150

train_data_dir = 'data/train'
validation_data_dir = 'data/valida
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值