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

devtools/2024/10/22 3:19:42/

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.ppmy.cn/devtools/127718.html

相关文章

2018年计算机网络408真题解析

第一题: 解析:TCP/IP体系结构应用层常用协议及其相应的运输层协议 TCP协议是面向连接可靠数据传输服务,UDP无连接不可靠的数据传输服务,IP无连接不可靠的数据连接服务。 FTP协议,SMTP协议和HTTP协议使用TCP协议提供的面…

Axure大屏可视化模板:打造跨领域数据分析平台的原型设计案例

数据可视化已成为各行各业提升管理效率、优化决策过程的重要手段。Axure作为一款强大的原型设计工具,其大屏可视化模板在农业、园区、城市、企业数据可视化、医疗等多个领域得到了广泛应用。本文将通过几个具体案例,展示Axure大屏可视化模板在不同领域中…

【CHI】CHI协议自问自答

学习CHI有一段时间了,如今回过头来,再读协议,一些问题做个记录。如果有错误的地方,欢迎指正。如果有其他的问题,也欢迎留言讨论。 spec: IHI0050F_amba_chi_architecture_spec 【持续更新ing】 目录 1. …

基于机器学习的二手车价格因素识别与预测

1.项目背景 随着二手车市场的快速发展,消费者对二手车的需求逐渐增加,然而,由于二手车的定价涉及多种复杂因素,不同条件下的车辆价值差异较大,如何精准地评估二手车的市场价值成为了一个亟待解决的问题。本项目通过数…

《使用Gin框架构建分布式应用》阅读笔记:p52-p76

《用Gin框架构建分布式应用》学习第4天,p32-p76总结,总计25页。 一、技术总结 1.Go知识点 (1)iouti 书上使用ioutil包读取JSON文件,但是从go 1.16 开始,不再推荐使用ioutil,应该使用os 包。 (2)json.Unmarshal() …

【AI论文精读5】知识图谱与LLM结合的路线图-P4(完)

【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】 P1,P2,P3 6 协同LLMs与知识图谱(KGs) 近年来,LLMs与知识图谱(KGs)的协同工作引起了越来越多的关注,这种协同结合了LLMs与知…

大厂面试真题-Arthas有哪些常用的命令

Arthas是Alibaba开源的一款Java诊断工具,它可以在不重启JVM的情况下,动态地查看JVM运行状态、类加载情况、内存使用情况、线程执行情况等,帮助开发者轻松排查线上问题。以下是Arthas排查线上问题时常用的命令: dashboard&#xff…

Windos如何调节麦克风音量

1、打开控制面板 2、点击:硬件和声音 3、出现下图,点击:声音。 4、打开如下界面,先点击:录制 5、再鼠标右键:麦克风阵列。点击属性。 6、选择级别,然后调解音量,最后确定应用。