【Python图像分类系列】建立CNN模型实现猫狗图像分类(案例+源码)

这是我的第275篇原创文章。

一、引言

基于CNN卷积神经网络在图像识别领域的应用:猫狗图像识别。主要内容包含:

  • 数据创建和预处理

  • 神经网络模型搭建

  • 神经网络模型的训练和拟合

文中使用的深度学习框架是Keras。部分数据展示:

猫:

图片

狗:

图片

二、实现过程

2.1 数据预处理

# 数据预处理
train_datagen = ImageDataGenerator(rescale=1./255)  # 进行缩放
test_datagen = ImageDataGenerator(rescale=1./255)  # 进行缩放train_generator = train_datagen.flow_from_directory(train_dir,  # 待处理的目录target_size=(150,150),  # 图像大小设置batch_size=20,class_mode="binary"  # 损失函数是binary_crossentropy 所以使用二进制标签
)validation_generator = test_datagen.flow_from_directory(validation_dir,  # 待处理的目录target_size=(150,150),  # 图像大小设置batch_size=20,class_mode="binary"  # 损失函数是binary_crossentropy 所以使用二进制标签
)for data_batch, labels_batch in train_generator:print(data_batch.shape)print(labels_batch.shape)break

数据输入到神经网络之前必须先转成浮点数张量。ImageDataGenerator类,可以快速创建Python生成器,将图形文件处理成张量批量,生成器的输出是150-150的RGB图像和二进制标签,形状为(20,)组成的批量。生成器会不断地生成这些批量,不断地循环目标文件夹中的图像。

图片

2.2 模型构建

#  构建模型
model = models.Sequential()
model.add(layers.Conv2D(32,(3,3),activation="relu",input_shape=(150,150,3)))
model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(64,(3,3),activation="relu"))
model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(128,(3,3),activation="relu"))
model.add(layers.MaxPooling2D((2,2)))model.add(layers.Conv2D(128,(3,3),activation="relu"))
model.add(layers.MaxPooling2D((2,2)))  #model.add(layers.Flatten())
model.add(layers.Dense(512, activation="relu"))
model.add(layers.Dense(1, activation="sigmoid"))model.summary()model.compile(loss="binary_crossentropy",optimizer=optimizers.RMSprop(lr=1e-4),metrics=["acc"])

模型结构:

图片

2.3 模型拟合

history = model.fit_generator(train_generator,  # 第一个参数必须是Python生成器steps_per_epoch=100,  # 2000 / 20epochs=30,  # 迭代次数validation_data=validation_generator,  # 待验证的数据集validation_steps=50
)model.save("cats_and_dogs_small.h5")

keras模型使用fit_generator方法来拟合生成器的效果。模型有个参数steps_per_epoch参数:从生成器中抽取steps_per_epoch个批量后,拟合进入下一轮。模型文件:

图片

2.4 模型评价

# 绘制训练过程中的损失和准确率
history_dict = history.history  # 字典形式
acc = history_dict["acc"]
val_acc = history_dict["val_acc"]
loss = history_dict["loss"]
val_loss = history_dict["val_loss"]epochs = range(1, len(acc)+1)
# acc
plt.plot(epochs, acc, "bo", label="Training acc")
plt.plot(epochs, val_acc, "b", label="Validation acc")
plt.title("Training and Validation acc")
plt.legend()
plt.show()# loss
plt.plot(epochs, loss, "bo", label="Training loss")
plt.plot(epochs, val_loss, "b", label="Validation loss")
plt.title("Training and Validation loss")
plt.legend()
plt.show()

acc曲线:

图片

loss曲线:

图片

三、小结

得到过拟合的结论:

  1. 随着时间的增加,训练精度在不断增加,接近100%,而验证精度则停留在70%

  2. 验证的损失差不多在第6轮后达到最小值,后面一定轮数内保持不变,训练的损失一直下降,直接接近0

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8771.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于opencv的车辆统计

车辆统计) 一、项目背景二、整体流程三、常用滤波器的特点四、背景减除五、形态学开运算闭运算 六、项目完整代码七、参考资料 一、项目背景 检测并识别视频中来往车辆的数量 最终效果图: 二、整体流程 加载视频图像预处理(去噪、背景减除…

C++类和对象中篇

🐇 🔥博客主页: 云曦 📋系列专栏:[C] 💨路漫漫其修远兮 吾将而求索 💛 感谢大家👍点赞 😋关注📝评论 文章目录 📔前言📔1、类的六个…

视频汇聚边缘网关EasyCVR硬件设备无法访问域名,解析失败该如何处理?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视…

小麦穗检测数据集VOC+YOLO格式6508张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):6508 标注数量(xml文件个数):6508 标注数量(txt文件个数):6508 标注…

实践指南:如何将SpringBoot项目无缝部署到Tomcat服务器

序言 SpringBoot 是一个用来简化 Spring 应用初始搭建以及开发过程的框架,我们可以通过内置的 Tomcat 容器来轻松地运行我们的应用。但在生产环境中,我们可能需要将应用部署到独立的 Tomcat 服务器上。本文给大家介绍 SpringBoot 项目部署到独立 Tomcat…

人工智能培训讲师咨询叶梓介绍及智能医疗技术与ChatGPT临床应用三日深度培训提纲

1、授课老师简介 叶梓,上海交通大学计算机专业博士毕业,高级工程师。主研方向:数据挖掘、机器学习、人工智能。历任国内知名上市IT企业的AI技术总监、资深技术专家,市级行业大数据平台技术负责人。 长期负责城市信息化智能平台的…

Android Jetpack学习系列之WorkManager

一、WorkManager概述 WorkManager 是 Android Jetpack 架构中的关键组件之一,主要用于处理后台任务。它提供了一种简单而可靠的方法来确保即使在应用进程可能被系统杀死、设备可能进入休眠状态、以及操作系统对后台服务的各种限制等困难条件下,后台任务…

JS-拖拽元素放大缩小

效果左右布局&#xff0c;拖拽后&#xff0c;宽度放大缩小 其实自己写也可以&#xff0c;不过还是发现了两个好用的js库&#xff0c;既然不需要自己写&#xff0c;当然是能偷懒就偷懒 1、resizerjs 官网地址&#xff1a;https://github.com/eknowles/resizerjs <!doctype …

ssrf初步

一&#xff0c;简介 全称&#xff1a;Server-Side Request Forgery&#xff08;中文&#xff1a;服务器端请求伪造&#xff09; 攻击者从服务端发起请求&#xff0c;让服务器连接任意外部系统&#xff0c;从而泄露敏感数据。主要利用各种协议的请求伪造&#xff0c;例如php协…

海豚调度器(DolphinScheduler)生产环境问题及解决方案汇总(持续更新)

踩的坑多了,就成为高手了。在开发还是面试时,掌握海豚调度器在生产环境遇到的各种问题,就能证明自己经验丰富。 目录 问题描述:在DolphinScheduler 1.3.5版本中,无法在界面新建Worker分组

IDEA使用Maven生成普通项目没有生成iml文件解决方法

右击主目录选择&#xff1a; Open in Terminal 在生成的控制台输入&#xff1a; mvn idea:module 回车便自动生成iml文件啦&#xff01; 双击下主目录就可以看见啦

数据分析概念定义和发展前景

数据分析概念定义和发展前景 前言一、数据分析概念二、数据的定义数据的定义数据的分类定性数据定量数据 三、数据的价值数据为什么具有价值 四、数据分析的目的对于企业来说总结 五、数据分析类型的划分描述性统计分析探索性数据分析传统的统计分析方法验证性数据分析 六、 数…

C语言程序性能优化:十大策略及代码案例解析

在软件开发领域&#xff0c;性能优化一直是核心关注点之一。对于使用C语言编写的程序&#xff0c;性能优化尤为重要&#xff0c;因为C语言直接与硬件操作紧密相关。本文将介绍C语言程序性能优化的十大策略&#xff0c;并通过代码案例来解析每项策略的实际应用。 利用高速缓存&…

1002. 查找共用字符

1002. 查找共用字符 题目链接&#xff1a;1002. 查找共用字符 代码如下&#xff1a; class Solution { public:vector<string> commonChars(vector<string>& words) {vector<string> res;if(words.size()0) return res;int hash[26]{0};for(int i0;i&…

【亲测可用】linux centos7.9 快速安装python3环境 手把手实操教程

安装好linux centos7.9 默认只有python2的环境如下&#xff1a; python2.7.5这个很老旧的版本了&#xff0c;有很多新库不支持&#xff0c;性能可能也不行。 接下来快速安装python3环境&#xff0c;并设置源做到快速安装包&#xff0c;设置虚拟环境&#xff0c;打造强大的pyth…

MacOS搭建docker本地私有镜像库

相关环境 macOS: bigsur 11.7.8 docker desktop: 4.22.0 docker engine: 24.0.5 准备工作 本机已经安装好docker desktop&#xff0c;未安装的自行参考其他教程。如果不能翻墙&#xff0c;可以修改本地的镜像地址&#xff0c;可在docker desktop 设置中的docker engine中修…

Redis-新数据类型-Bitmaps

新数据类型-Bitmaps 简介 在计算机中&#xff0c;用二进制&#xff08;位&#xff09;作为存储信息的基本单位&#xff0c;1个字节等于8位。 例如 “abc” 字符串是由 3 个字节组成&#xff0c;计算机存储时使用其二进制表示&#xff0c;"abc"分别对应的ASCII码是 …

数据结构与算法 知识点整理

线性表 线性表的基本概念 线性表的定义&#xff1a;线性表是一个具有相同特性的数据元素的有限序列。 相同特性&#xff1a;所有元素属于同一数据类型 有限&#xff1a;数据元素个数是有限的 序列&#xff1a;数据元素由逻辑序号&#xff08;逻辑位序&#xff09;唯一确定…

Oracle SQL Developer导出数据库表结构,表数据,索引以及序列号等对象

目录 一、业务需求 三、环境说明 三、数据导出 四、数据导入 一、业务需求 通过Oracle SQL Developer软件将指定oracle数据库中的表结构&#xff0c;表数据&#xff0c;索引以及序列号等对象导出成SQL文件。 三、环境说明 数据库版本&#xff1a;Oracle Database 11g Expres…

智能小程序 Ray 开发——媒体组件 Video 和 NativeVideo 实操讲解

video 导入 import { Video } from ray-js/ray; import { createVideoContext } from ray-js/api; 视频 相关 API: createVideoContext 属性说明 属性类型默认值必填说明srcstring是要播放视频的资源地址&#xff0c;支持网络路径; 注意分区部署情况下,视频是否支持访问du…