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

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

样本量: 8005

python 复制代码
# ==================================================================
# 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 modelhttps://www.kaggle.com/datasets/tongpython/cat-and-dog?resource=download

百度网盘分享:

链接:https://pan.baidu.com/s/1T1mymwIqOOF3MKfWxRtnpQ

提取码:6axn

晚安,各位

相关推荐
机器之心1 分钟前
从零搭一套可复现、可教学、可观察的RL for VLM训练流程,我们试了试
人工智能
界面开发小八哥4 分钟前
企业级Java开发工具MyEclipse v2025.1——支持AI编码辅助
java·ide·人工智能·myeclipse
闭月之泪舞6 分钟前
OpenCv高阶(一)——图像金字塔(上采样、下采样)
人工智能·opencv·计算机视觉
量子位7 分钟前
首个 AI 科学家发论文进 ICLR!得分 6/7/6,从选题到实验全程零人工,连 GitHub 代码库都是 AI 写的
人工智能·aigc
程序猿chen25 分钟前
JVM考古现场(十七):鸿蒙初辟——从太极二进到混沌原初的编译天道
开发语言·jvm·git·后端·程序人生·java-ee·改行学it
兔兔爱学习兔兔爱学习38 分钟前
金融大模型
人工智能·python·深度学习
9命怪猫1 小时前
DeepSeek底层揭秘——《推理时Scaling方法》技术对比浅析
人工智能·深度学习·机器学习·ai·大模型
呼呼~²⁰¹⁷1 小时前
opencv无法设置禁用RGB转换问题
人工智能·opencv·计算机视觉
奕泽财经1 小时前
海阳科技IPO:业务独立性、业绩稳定性、财务规范性存致命缺陷
人工智能