深度学习--CNN实现猫狗识别二分类(附带下载链接, 长期有效)

1. 代码实现(包含流程解释)

 样本量:  8005

# ==================================================================
# 1.导入数据集(加载图片)+数据预处理# 进行图像增强, 通过对图像的旋转 ,缩放,剪切变换, 翻转, 平移等一系列操作来生成新样本, 进而增加样本容量, 
# 同时对图片数值进行归一化[0:1]
from tensorflow.keras.preprocessing.image import ImageDataGenerator
# 下面一些参数是ai生成的, 感觉自己都学到狗身上去了, 直接让ai去学训练模型吧, 它比我做得好,呜呜呜
# 加上ai提供的参数之后, 准确率降低了百分之三十, 果然, 我还是有点存在价值的
dog_cat_datagen = ImageDataGenerator(rescale=1./255,  # 归一化图像
)
# 加载图像数据, 将图像转换为50*50像素的图片, 每次训练选32张图片进行反向搜索, 分类类型是二分类
dog_cat_data=dog_cat_datagen.flow_from_directory(r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\training_set", target_size=(50,50), batch_size=32,class_mode='binary')# ===============================================================================================
# 2.模型训练
# 模型框架搭建
# 导入线性堆叠框架
from keras.models import Sequential
CNN=Sequential()# 模型填充
# 导入卷积层模块, 池化层模块, 展开层模块, 全连接层模块
from keras.layers import Conv2D, MaxPool2D, Flatten, Dense
# 第一波卷积层,  就是为什么需要激活函数呢???????不理解啊!!!
CNN.add(Conv2D(32,(3,3), input_shape=(50,50,3), activation='relu'))
# 第一波池化层, 默认step==1, 默认进行图像填充padding???
CNN.add(MaxPool2D(pool_size=(2,2)))
# 第二波卷积层
CNN.add(Conv2D(32,(3,3), activation='relu'))
# 第二波池化层
CNN.add(MaxPool2D(pool_size=(2,2)))
# flatten--展开层, 作用就是转换图像矩阵的维度, 将二维转化为一维来作为全连接层的输入
CNN.add(Flatten())
# FC layer--全连接层
CNN.add(Dense(units=128, activation='relu'))
CNN.add(Dense(units=1, activation='sigmoid'))# 模型编译调优, 加一个精确率是什么鬼? 看看效果再说吧
CNN.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])CNN.summary()# 训练模型, 使用fit_generator是因为对图像进行了增强, 得到的数据是基于ImageDataGenerator产生的
# CNN.fit(dog_cat_data, epochs=25)
CNN.fit(dog_cat_data,epochs=25,
#    steps_per_epoch=dog_cat_data.samples // dog_cat_data.batch_size
)# ================================================================================================================
# 模型评估与预测
# 训练集的准确率
train_accuracy=CNN.evaluate(dog_cat_data)
print("训练集准确率为:", train_accuracy[1])# 测试集准确率
# 需要先对测试集进行导入和预处理
from tensorflow.keras.preprocessing.image import ImageDataGenerator
dog_cat_data_plus=ImageDataGenerator(1./255)
dog_cat_data_test=dog_cat_data_plus.flow_from_directory(r"C:\Users\鹰\Desktop\ML_Set\dog_cat_class\test_set", target_size=(50,50), batch_size=32, class_mode='binary')
test_accuracy=CNN.evaluate(dog_cat_data_test)
print("测试集准确率为:", test_accuracy[1])# ======================================================================
#  在网上下载图片, 进行随机测试
from keras.preprocessing.image import load_img, img_to_array
pic_animal=r"C:\Users\鹰\Desktop\Dog+Cat\12.jpg"
pic_animal=load_img(pic_animal, target_size=(50,50))
pic_animal=img_to_array(pic_animal)
# 归一化
pic_animal=pic_animal/255
pic_animal=pic_animal.reshape(1,50,50,3)
# 预测
res_pro=CNN.predict(pic_animal)
import numpy as np
res=np.argmax(res_pro, axis=1)
print("result is :", res)
# 结果为0--猫, 结果为1--狗

2.注意:

这个训练的模型有一点问题, 当然也有可能是我的问题:

模型在训练集和测试集上表现不错, 训练集准确率接近100%, 测试集准确率70%左右, 

但使用在百度上下载的猫狗图片进行二分类预测时, 测试结果全部显示[0], 也就是猫, 

希望路过的大佬能指点一下, 请收下我的膝盖!!!!!!  

3.数据集链接:

官网:

Cat and Dog | KaggleCats and Dogs dataset to train a DL modelicon-default.png?t=O83Ahttps://www.kaggle.com/datasets/tongpython/cat-and-dog?resource=download

百度网盘分享:

链接:https://pan.baidu.com/s/1T1mymwIqOOF3MKfWxRtnpQ 
提取码:6axn

晚安,各位        

        

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

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

相关文章

Mysql 和MongoDB用户访问权限问题

Mysql 刚给二线运维排查了一个问题,Mysql安装完可用,且可用navicat连接,项目中通过127.0.0.1去连数据库报错了。错误是access denied for user ‘root’localhost,排查思路 1. 密码是否正确 (不需要重置。到Mysql的安装目录下找…

软件I2C的代码

I2C的函数 GPIO的配置——scl和sda都配置为开漏输出 void MyI2C_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB,ENABLE);GPIO_InitTypeDef GPIO_InitStruture;GPIO_InitStruture.GPIO_Mode GPIO_Mode_Out_OD;GPIO_InitStruture.GPIO_PinGPIO_Pin_10 | GPIO_Pin_…

Linux服务器前后端项目部署vue+springboot—搭建服务器上的运行环境(JDK、Redis、MySQL、Nginx)

Linux服务器前后端项目部署—①搭建服务器上的运行环境 一、系统参数信息和使用工具 1、服务器信息 华为云 CenteOS7.8 64 配置信息:2核4G 2、使用工具 Xshell6 二、环境安装和配置 (一)JDK的下载和安装 1、创建一个新目录或者进入目…

Spring event实战

什么是spring event? Spring Event 是 Spring 框架提供的一种事件驱动编程模型。它允许应用程序中的组件通过发布和监听事件来进行松耦合的交互。这种机制基于观察者设计模式,其中组件可以扮演事件发布者的角色,而其他组件则作为事件监听器来…

UEFI BIOSAPP编程开发查询手册.pdf

UEFI BIOS&APP编程开发查询手册.pdf 独家整理推荐。 享受, 半年免费更新服务, 一年免费咨询服务。

django5入门【03】新建一个hello界面

注意 ⭐前提:将上节的项目导入到pycharm中操作步骤总结: 1、HelloDjango/HelloDjango目录下,新建一个views.py 2、HelloDjango/HelloDjango/urls.py 文件中,配置url路由信息 3、新建终端,执行运行命令python manag…

RuoYi-Vue若依 环境搭建 速成

一、若依简介 RuoYi-Vue 是一个开源的后台管理系统,适用于快速开发企业级应用。该平台由两部分组成:前端和后端。 (1)技术框架 前端技术: Vue.js: 前端框架使用 Vue.js,这是一种流行的JavaScript框架&a…

[实时计算flink]基于Paimon的数据库实时入湖快速入门

Apache Paimon是一种流批统一的湖存储格式,支持高吞吐的写入和低延迟的查询。本文通过Paimon Catalog和MySQL连接器,将云数据库RDS中的订单数据和表结构变更导入Paimon表中,并使用Flink对Paimon表进行简单分析。 背景信息 Apache Paimon是一…

(46)MATLAB仿真从正弦波转换为方波

文章目录 前言一、MATLAB代码二、仿真结果画图三、吉布斯效应 前言 本文使用MATLAB仿真的方法,给出从正弦波转换为方波的过程,说明方波的傅里叶级数展开式是如何由奇次谐波的和构成的。另外,说明了在此过程中的吉布斯效应。 一、MATLAB代码 …

pm2 部署vue

1、为什么要使用pm2运行vue项目 为什么!!!我们一般是将打出来的DIST目录上传到服务器发布即可,为啥我会使用PM2来运行部署呢? 前提:vue2mysqlexpress不使用中间服务器,即不要后端人员开发接口服…

Bands Page 乐队页面

“带区”页面提供了用于添加和删除带区、自定义带区设置以及更改带区和列布局的设计时工具。此页面如下图所示。 该页面说明了一个预览部分、一个用于访问所选频段设置的属性网格以及一组按钮,这些按钮提供了下面列表中描述的功能。 添加新乐队…- 创建新带。创建新…

Elasticsearch使用实战以及代码详解

Elasticsearch 是一个使用 Java 语言编写、遵守 Apache 协议、支持 RESTful 风格的分布式全文搜索和分析引擎,它基于 Lucene 库构建,并提供多种语言的 API。Elasticsearch 可以对任何类型的数据进行索引、查询和聚合分析,无论是文本、数字、地…

C++学习,标准库 <ctime>

C 标准库提供了丰富的功能&#xff0c;其中 <ctime> 是处理时间和日期的标准库之一。它提供了一组函数&#xff0c;用于获取当前时间、日期以及执行时间相关的计算。<ctime> 库定义了一组与时间相关的函数和类型&#xff0c;这些函数和类型允许程序员在程序中处理时…

四、Linux 基本命令全攻略

Linux 基本命令全攻略 在 Linux 系统的世界里&#xff0c;掌握基本命令是至关重要的。不同的 Linux 发行版虽然在某些方面可能有所差异&#xff0c;但大部分基本命令是通用的。下面将按不同的系统分类&#xff0c;为大家详细介绍一些常用的 Linux 基本命令及其含义。 一、Ubu…

DeepSpeed性能调优与常见问题解决方案

1. 引言 什么是DeepSpeed&#xff1f; DeepSpeed是由微软开源的深度学习训练优化库&#xff0c;旨在帮助研究人员和工程师高效地训练大规模深度学习模型。基于PyTorch框架&#xff0c;DeepSpeed提供了一系列先进的技术&#xff0c;如ZeRO&#xff08;Zero Redundancy Optimiz…

【论文学习与撰写】,论文word文档中出现乱码的情况,文档中显示的乱码,都是英文字母之类的,但打印预览是正常的

目录 1、问题 2、解决方法 1、问题 写论文的时候&#xff0c;有时会出现乱码的情况&#xff0c; 如下图&#xff0c;这种情况&#xff0c; 可是 在打印预览的时候&#xff0c;就显示的正常 如下图&#xff0c; 2、解决方法 既然是文档正文显示错误&#xff0c;显示乱码&…

JAVA集合知识总结(六)

文章目录 JAVA集合知识总结(六)Queue1. Queue 接口2. Queue 常用方法3. Queue 的实现类介绍3.1 LinkedList3.2 PriorityQueue3.3 阻塞队列&#xff08;BlockingQueue&#xff09;3.4 Deque&#xff08;双端队列&#xff09; 4. 应用场景总结 JAVA集合知识总结(六) Queue Queue…

【HarmonyOS NEXT】服务端向终端推送消息——获取Push Token

【需求】 获取Push Token 【文档】 https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V5/push-get-token-V5 【代码】 // EntryAbility.ets 文件 import { pushService } from kit.PushKit; export default class EntryAbility extends UIAbility {onCreat…

vue实现html转化pdf功能,pdf文件可以复制文字

之前使用 html2canvas 和 jsPDF 实现html转pdf&#xff0c;但是客户说不能复制pdf中的文字&#xff0c;要改一下&#xff0c;先说不能复制的方法&#xff0c;再说可以复制的方法 一&#xff0c;html2canvas 和 jsPDF&#xff08;图片插入pdf不可复制&#xff09; 创建pdf.js文…

【详解】下载MySql安装教程(帮助数据库下载)

此版本是我下载的版本&#xff0c;其他版本均可以。 1.官网下载相应的版本&#xff1a;MYSQL&#xff1a;8.0.33 https://www.mysql.com/ 2.点击DOWNLOADS进入 3.在上述界面当中往下翻&#xff0c;找到社区版的下载界面 4.点进社区版的界面 前三个是Linux系统下的安装&a…