深度学习-python猫狗识别tensorflow2.0

1. 数据集的准备

猫狗识别的数据集依旧可以从Kaggle上下载,数据集下载链接:
https://www.kaggle.com/c/dogs-vs-cats

下载后解压,得到如下的文件夹

文件夹train里面放着25000张图像,猫和狗的图像分别都是12500张,图像名称上都有标明类别。文件夹test1里面放的是测试集,里面有12500张图像,都没有标签,要自己来预测分类。

把数据集目录整理成如下的形式

文件夹test1不变,新建一个文件夹validation,在文件夹train中分别拿出猫和狗的图像各2500张,存到文件夹validation中。文件夹train和validation内都要新建文件夹cat和dog,分别把猫和狗的图像都存到对应文件夹中。

这时候数据集目录结构如下

2. 数据集的导入

在训练前,先导入训练集和验证集。使用keras.preprocessing.image.ImageDataGenerator()做图像增强的数据预处理设置,再使用flow_from_directory()从文件路径中导入数据集,并设置图像大小、batch_size和是否shuffle等参数。

python 复制代码
train_datagen = keras.preprocessing.image.ImageDataGenerator(
        rescale=1. / 255,
        rotation_range=40,
        width_shift_range=0.2,
        height_shift_range=0.2,
        shear_range=0.2,
        zoom_range=0.2,
        horizontal_flip=True,
        fill_mode='nearest',
    )

    train_generator = train_datagen.flow_from_directory(
        train_dir,
        target_size=(width, height),
        batch_size=batch_size,
        seed=7,
        shuffle=True,
        class_mode='categorical'
    )

    valid_datagen = keras.preprocessing.image.ImageDataGenerator(
        rescale=1. / 255,
    )

    valid_generator = valid_datagen.flow_from_directory(
        valid_dir,
        target_size=(width, height),
        batch_size=valid_batch_size,
        seed=7,
        shuffle=False,
        class_mode="categorical"
    )

3. 编写神经网络结构

编写一个非常基础的卷积神经网络

复制代码
model = keras.models.Sequential([
        keras.layers.Conv2D(filters=32, kernel_size=3,
                            padding='same', activation='relu',
                            input_shape=[width, height, channel]),
        keras.layers.Conv2D(filters=32, kernel_size=3,
                            padding='same', activation='relu'),
        keras.layers.MaxPool2D(pool_size=2),

        keras.layers.Conv2D(filters=64, kernel_size=3,
                            padding='same', activation='relu'),
        keras.layers.Conv2D(filters=64, kernel_size=3,
                            padding='same', activation='relu'),
        keras.layers.MaxPool2D(pool_size=2),

        keras.layers.Conv2D(filters=128, kernel_size=3,
                            padding='same', activation='relu'),
        keras.layers.Conv2D(filters=128, kernel_size=3,
                            padding='same', activation='relu'),
        keras.layers.MaxPool2D(pool_size=2),

        keras.layers.Flatten(),
        keras.layers.Dense(128, activation='relu'),
        keras.layers.Dense(num_classes, activation='softmax')
    ])
    
    model.compile(loss='categorical_crossentropy',
                  optimizer='adam', metrics=['accuracy'])
    model.summary()

优化器使用adam,损失函数使用'categorical_crossentropy' ,metrics参数填入accuracy,评估模型在训练和测试过程中的准确率。

4. 模型训练

训练模型,设置callbacks,使用model.fit() 开始训练。

python 复制代码
callbacks = [
            keras.callbacks.TensorBoard(logdir),
            keras.callbacks.ModelCheckpoint(output_model_file,
                                            save_best_only=True,
                                            save_weights_only=True),
            keras.callbacks.EarlyStopping(patience=5, min_delta=1e-3)
        ]
history = model.fit(
        train_generator,
        epochs=epochs,
        validation_data = valid_generator,
        callbacks = callbacks
    )

训练100步,看看效果。

由于使用了EarlyStopping,当准确率在几个epochs内都没有提高超过一定幅度的话就会停止训练。由图可以看出,训练到40个epoch左右验证集的准确率达到90%多了。下面是训练过程的准确率和损失值变化曲线!

5.预测和分类

先读取文件夹test1中的图像,使用 model.predict() 进行预测,再根据预测结果把图像进行分类,分别存储到 猫 和 狗 的文件夹中。

分类为猫的图像

分类为狗的图像

预测的图像一共12500张,分类之后两个文件夹内分别都是6000多张,几乎持平,分类效果还是不错的。

项目源码+资料包↓

相关推荐
智驱力人工智能7 分钟前
安全帽检测算法如何提升工地安全管理效率
人工智能·算法·安全·边缘计算·安全帽检测·口罩检测·安全鞋检测
即兴小索奇12 分钟前
AI适老服务暖人心:AI适老机顶盒破数字鸿沟、毫米波雷达护独居安全,银发生活新保障
人工智能·ai·语音识别·商业·ai商业洞察·即兴小索奇
riveting28 分钟前
技术突破引领应用革新:RK3506 开发板的嵌入式革命
人工智能·物联网·制造·明远智睿·rk3506
Lntano__y44 分钟前
详细分析大语言模型attention的计算复杂度,从数学角度分析
人工智能·语言模型·自然语言处理
法迪1 小时前
【学习】Linux 内核中的 cgroup freezer 子系统
人工智能·opencv·计算机视觉
魔乐社区1 小时前
OpenAI重新开源!gpt-oss-20b适配昇腾并上线魔乐社区
人工智能·gpt·深度学习·开源·大模型
用户5191495848451 小时前
WordPress开放嵌入自动发现功能中的XSS漏洞分析
人工智能·aigc
失散132 小时前
自然语言处理——03 RNN及其变体
人工智能·rnn·自然语言处理·gru·lstm
Jinkxs2 小时前
告别人工建模:AI 自动化 ETL 工具对比,数据 pipeline 搭建时间缩短 60% 的实践
人工智能·自动化·etl
B612 little star king2 小时前
UNIKGQA论文笔记
论文阅读·人工智能·笔记·自然语言处理·知识图谱