文章

  • 1.导入第三方库
  • 2.定义模型
  • 3.训练数据和测试数据生成
  • 4.训练模型

猫狗分类的数据集可以查看图像数据预处理。
代码运行平台为jupyter-notebook,文章中的代码块,也是按照jupyter-notebook中的划分顺序进行书写的,运行文章代码,直接分单元粘入到jupyter-notebook即可。
简单CNN实现猫狗分类代码:

1.导入第三方库

from keras.models import Sequential
from keras.layers import Convolution2D,MaxPooling2D
from keras.layers import Activation,Dropout,Flatten,Dense
from tensorflow.keras.optimizers import Adam
from keras.preprocessing.image import ImageDataGenerator
import os

2.定义模型

# 定义模型
model = Sequential()
model.add(Convolution2D(input_shape=(150,150,3),filters=32,kernel_size=3,strides=1,padding="same",activation="relu"))
model.add(Convolution2D(filters=32,kernel_size=3,strides=1,padding="same",activation="relu"))
model.add(MaxPooling2D(pool_size=2,strides=2,padding="valid"))model.add(Convolution2D(filters=64,kernel_size=3,strides=1,padding="same",activation="relu"))
model.add(Convolution2D(filters=64,kernel_size=3,strides=1,padding="same",activation="relu"))
model.add(MaxPooling2D(pool_size=2,strides=2,padding="valid"))model.add(Convolution2D(filters=128,kernel_size=3,strides=1,padding="same",activation="relu"))
model.add(Convolution2D(filters=128,kernel_size=3,strides=1,padding="same",activation="relu"))
model.add(MaxPooling2D(pool_size=2,strides=2,padding="valid"))model.add(Flatten())
model.add(Dense(64,activation="relu"))
model.add(Dropout(0.5))
model.add(Dense(2,activation="softmax"))# 定义优化器
adam = Adam(lr=1e-4)# 定义优化器,loss_function,训练过程中计算准确率
model.compile(optimizer=adam,loss="categorical_crossentropy",metrics=['accuracy']
)# 查看模型的结构
model.summary()

运行结果:

3.训练数据和测试数据生成

# 训练集数据生成
train_datagen = ImageDataGenerator(rescale=1./255,# 归一化处理shear_range=0.2,# 随机裁剪zoom_range=0.2,# 图片放大horizontal_flip=True # 水平翻转
)
# 测试集数据处理
test_datagen = ImageDataGenerator(rescale=1./255)

测试集通常不需要做复杂的数据生成,测试集只是未来测试才用,而训练集时为了
做数据生成是为了:

  • 1.增加数据量,使得图片各种各样
  • 2.增加模型的鲁棒性,使其泛化性更好

flow_from_directory:

  • directory:目标文件夹路径,对于每一个类,该文件夹都要包含一个子文件夹.子文件夹中任何JPG、PNG、BNP、PPM的图片都会被生成器使用
  • target_size:整数tuple,默认为(256,256).图像将被resize成该尺寸
  • color_mode:颜色模式,为"grayscale",“rgb"之一,默认为"rgb”.代表这些图片是否会被转换为单通道或三通道的图片.
  • classes:可选参数,为子文件夹的列表,如[‘dogs’,‘cats’]默认为None.若未提供,则该类别列表将从directory下的子文件夹名称/结构自动推断,每一个子文件夹都会被认为是一个新的类。(类别的顺序将按照字母表顺序映射到标签值)。通过属性class_indices可获得文件夹名与类的序号的对应字典。
  • class_mode:“categorical”,“binary”,“sparse"或None之一,默认为"categorical”.该参数决定了返回的标签数组的式,"categorical"会返回2D的one-hot编码标签,"binary"返回1D的二值标签."sparse"返回1D的整数标签,如果为None则不返回任何标签,生成器将仅仅生成batch数据,这种情况在使用model.predict_generator()和model.evaluate_generator()等函数时会用到.
  • batch_size:batch数据的大小,默认为32
  • shuffle:是否打乱数据,默认为True
  • seed:可选参数,打乱数据和进行变换时的随机数种子
batch_size = 32
# 生成训练数据
train_generator = train_datagen.flow_from_directory("../input/cat-and-dog-classify/train/train",# 训练数据路径target_size=(150,150),# 设置图片大小batch_size=batch_size # 批次大小
)
# 测试数据
test_generator = test_datagen.flow_from_directory("../input/cat-and-dog-classify/test/test",# 训练数据路径target_size=(150,150),# 设置图片大小batch_size=batch_size # 批次大小
)
# 统计文件个数
totalFileCount_train = sum([len(files) for root,dirs,files in os.walk("../input/cat-and-dog-classify/train/train")])
totalFileCount_test = sum([len(files) for root,dirs,files in os.walk("../input/cat-and-dog-classify/test/test")])

4.训练模型

model.fit_generator(train_generator,steps_per_epoch=totalFileCount_train/batch_size,epochs=50,validation_data=test_generator,validation_steps=totalFileCount_train/batch_size
)# 保存模型
model.save("CNN1.h5")

这里面有一个steps_per_epoch=totalFileCount_train/batch_size这个是计算每批次的总步数,一批次的总步数等于数据量除以batch_size。
运行结果:

猫狗分类-简单CNN相关推荐

  1. 猫狗分类-VGG16-bottleneck

    文章 一.网络模型训练 二.完整代码 1.导入第三方库 2.载入预测训练的VGG16模型,不包括全连接层 3.对数据进行增强 4.保存卷积层和池化层训练的数据 5.读取数据+给数据添加标签 6.搭建全 ...

  2. Pytorch+CNN+猫狗分类实战

    文章目录 0.前言 1.猫狗分类数据集 1.1数据集下载(可选部分) 1.2数据集分析 2.猫狗分类数据集预处理 2.1训练集和测试集划分 2.2训练集和测试集读取 3.剩余代码 4.总结 0.前言 ...

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

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

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

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

  5. CNN神经网络猫狗分类经典案例,深度学习过程中间层激活特征图可视化

    AI:CNN神经网络猫狗分类经典案例,深度学习过程中间层激活特征图可视化 基于前文 https://zhangphil.blog.csdn.net/article/details/103581736 ...

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

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

  7. CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用

    CV之IC之AlexNet:基于tensorflow框架采用CNN卷积神经网络算法(改进的AlexNet,训练/评估/推理)实现猫狗分类识别案例应用 目录 基于tensorflow框架采用CNN(改进 ...

  8. 【TensorFlowKeras】基于卷积神经网络CNN的猫狗分类

    文章目录 一.猫狗数据集 二.构建网络 三.基准模型调整 四.使用VGG19实现猫狗分类 五.参考

  9. 【CNN】搭建AlexNet网络——并处理自定义的数据集(猫狗分类)

    前言 2012年,AlexNet横空出世.它首次证明了学习到的特征可以超越手工设计的特征.它一举打破了计算机视觉研究的现状. AlexNet使用了8层卷积神经网络,并以很大的优势赢得了2012年Ima ...

最新文章

  1. 130. Surrounded Regions 被围绕的区域
  2. SAP UI5 应用开发教程之三十三 - SAP UI5 应用的响应式布局特性(Responsiveness)试读版
  3. 基于CDS view生成的OData服务的metadata是如何加载的
  4. 学物理也能拿数学世界级奖!每逢实验失败就跑步......河大女生太励志了!!
  5. 无线策略服务器,无线网络中的分布式资源管理策略研究
  6. 边缘计算是流行词还是风口?开发者怎样选开源项目?
  7. 远哥跟你说 Spring的 classpath 通配符加载配置文件
  8. eXeScope 注册机制破解
  9. ArcGIS地图制图
  10. 2.4G信道跳频-LFSR-C代码实现
  11. 小莫取色精灵 使用教程_MQ
  12. mysql中怎么根据生日(brithday)获取年龄
  13. python 导入包的路径顺序
  14. 最新的QQ跳转支付宝并自动领红包脚本。
  15. 关于Gitlab恼人的Git无权限访问问题解决
  16. 小哥哥小姐姐,来尝尝 Async 函数这块语法糖
  17. java版捕鱼达人----完整版补充
  18. 轻松几步获得上万点击率(三)
  19. 做财务讲师真的好吗?启宣教育告诉你答案
  20. 06_03_SpringMVC 任务一: SpringMVC基本应用(SpringMVC请求与响应,进行日期转换工具类DateConverter)

热门文章

  1. java自动化分页_Python+Selenium自动化实现分页(pagination)处理
  2. 计算智能--粒子群优化算法
  3. 奥飞娱乐疯狂扩张之痛:影视、游戏掣肘动漫第一股
  4. kudu 1.7  源码安装
  5. js动画与css3动画的区别
  6. 盘点游戏中那些“欺骗玩家眼睛的开发技巧”
  7. Race Condition(竞争条件)
  8. windows pppoe server
  9. 4. 事务隔离级别之Read Uncommitted
  10. 2021年西式面点师(中级)考试试卷及西式面点师(中级)实操考试视频