基于Alexnet网络实现猫狗数据集分类(Keras框架)

目录

  • 1、作者介绍
  • 2、Alexnet网络
    • 2.1 网络介绍
    • 2.2 AlexNet网络的主要特点
  • 3、基于Alexnet网络实现猫狗数据集分类
    • 3.1 猫狗大战数据集
    • 3.2 数据集处理
    • 3.3 准备工作
    • 3.4 训练过程
    • 3.5 对比实验
      • 3.5.1 HALCON平台下的Alexnet对比实验
      • 3.5.2 HALCON平台下的Resnet-50对比实验
      • 3.5.3 HALCON平台下的Mobilenet对比实验
    • 3.6 几种模型的总结
    • 3.7 问题与分析
  • 参考连接

1、作者介绍

程敬,女,西安工程大学电子信息学院,2022级研究生
研究方向:电子信息
电子邮件:1105719037@qq.com

陈梦丹,女,西安工程大学电子信息学院,2022级硕士研究生,张宏伟人工智能课题组
研究方向:机器视觉与人工智能
电子邮件:1169738496@qq.com

2、Alexnet网络

2.1 网络介绍

LeNet于1998年提出的,是最早的神经网络之一,用于解决手写识别的问题。

传承了LeNet ,AlexNet是于2012年提出的一个深度学习卷积神经网络模型。它在ImageNet图像识别挑战赛中取得了巨大的成功,引领了深度学习在计算机视觉领域的应用潮流。

在这里插入图片描述
AlexNet采用了一种前所未有的深度架构,具有8个卷积层和3个全连接层。它的架构相对较深,参数也相对Lenet较大。

2.2 AlexNet网络的主要特点

(1) 架构:是更大更深的LeNet:10倍的参数个数,260倍的计算复杂度。
(2) Relu:相对于传统的sigmoid函数,ReLU能够更好地解决梯度消失的问题,并且计算速度更快。
(3) MaxPooling:使输出的值更大,梯度更大,训练会相对容易。
(4) 丢弃法:引入了Dropout层,用于减少过拟合。Dropout随机地将一部分神经元的输出置零,可以有效地提高模型的泛化能力。
(5) 数据增强:为了增加训练数据的多样性,AlexNet在训练过程中进行了数据增强操作,如随机裁剪、水平翻转和改变亮度等。

3、基于Alexnet网络实现猫狗数据集分类

这里给出用Keras框架编写好的完整程序的百度网盘链接:
链接:https://pan.baidu.com/s/1U-xVSI4qrlO67DhpY3UaHA
提取码:eu9u

3.1 猫狗大战数据集

这个数据集是Kaggle大数据竞赛的一道赛题,利用给定的数据集,用算法实现猫和狗的识别。 其中包含了猫和狗的图片数量都是12500张且按顺序排序。

在这里插入图片描述

3.2 数据集处理

(1)、resize(227*227),代码如下:

import cv2
import os
# 数据预处理,把图片数据集的所有图片修剪成固定大小形状
def image_tailor(input_dir, out_dir):
    for root, dirs, files in os.walk(input_dir):
        for file in files:
            # file为root目录中的文件
            filepath = os.path.join(root, file)     # 连接两个或更多的路径名组件,filepath路径为/root/file
            try:
                image = cv2.imread(filepath)        # 根据输入路径读取照片
                dim = (227, 227)                    # 裁剪的尺寸
                resized = cv2.resize(image, dim)    # 按比例将原图缩放成227*227
                path = os.path.join(out_dir, file)  # 保存的路径和相应的文件名
                cv2.imwrite(path, resized)          # 进行保存
            except:
                print(filepath)
                os.remove(filepath)
        cv2.waitKey()

input_patch = 'F:\\data\\kaggle\\test1'  # 数据集的地址
out_patch = 'F:\\data\\fixdata\\tailor'  # 图片裁剪后保存的地址
image_tailor(input_patch, out_patch)
print('reshape finished')

(2)、重命名:把图片命名为后续代码加载需要的格式,代码如下:

def rename(dir_path):
    global j
    dir_files=os.listdir(dir_path) #得到该文件夹下所有的文件
    for file in  dir_files:  #这里的file已经是图片的名字了
        num = str(j).zfill(5)
        j = j + 1
        filename = "dog." + num  # 修改文件名的格式
        file_path=os.path.join(dir_path,file)  #路径拼接成绝对路径
        new_name=os.path.join(dir_path,filename+".jpg")
        os.rename(file_path, new_name)
if __name__ == '__main__':
    dir_path = 'E:\\Desktop\\PetImages\\cat_dog_resized\\Dog'
    global j
    j = 0
    rename(dir_path)

(3)、划分数据集:训练集:验证集:测试集=70% : 15% : 15%,结果如下:

在这里插入图片描述

3.3 准备工作

在进行训练之前,首先将数据集的内容保存到一个TXT文件中,便于读取,代码如下:

import os
photos = os.listdir("./data/image/train/")
with open("data/dataset.txt","w") as f:
    for photo in photos:
        name = photo.split(".")[0]
        if name=="cat":
            f.write(photo + ";0\n")
        elif name=="dog":
            f.write(photo + ";1\n")
f.close()

在这段代码中,我们给不同的类别打上了标签方便训练,如果是猫,便签为0;如果是狗,标签为1。在运行代码之后,我们就可以看到生成的txt文件如下图所示。

在这里插入图片描述

3.4 训练过程

训练50轮的结果:在验证集上达到86%的准确度。

在这里插入图片描述

3.5 对比实验

3.5.1 HALCON平台下的Alexnet对比实验

在这里插入图片描述
这个平台很完善,操作简单,界面友好。在训练猫狗数据集分类任务时,只需要将处理后的数据传入平台,平台会自动分配训练集、验证集和测试集。接着选择所需要的网络,设置训练轮数和学习率灯参数,就可以直接开始训练,训练完成后经过测试会得到准确度等数据,如下图,我们可以看到使用Alexnet训练的模型准确率为93.69%。

在这里插入图片描述
并且该系统还会生成模型对于不同类别检测的准确度及其他的一些参考指标。

在这里插入图片描述

还有一些预测错误的图片展示,以方便我们了解到哪些图片是容易识别错误的。

在这里插入图片描述

3.5.2 HALCON平台下的Resnet-50对比实验

使用Resnet-50进行猫狗数据集分类,可以看到检测的准确率是97.91%,每个图像的平均推理时间是6.86ms。

在这里插入图片描述

3.5.3 HALCON平台下的Mobilenet对比实验

使用Mobilenet进行猫狗数据集分类,可以看到检测的准确率是97.25%,每个图像的平均推理时间是1.78ms。

在这里插入图片描述

3.6 几种模型的总结

(1)、AlexNet(2012)采用了ReLU激活函数和Dropout正则化技术,它深度学习图像分类任务中的突破性成果引领了后续模型的发展。
(2)、ResNet(2015)通过引入残差连接(residual connection)来构建深层网络,解决了深度神经网络训练中的梯度消失问题。
(3)、MobileNet(2017)使用了深度可分离卷积(depthwise separable convolution)来减少模型参数量和计算量,是比较轻量化的模型,适合于实时应用和资源受限的环境。

3.7 问题与分析

问题1:ImportError: cannot import name ‘Adam’ from ‘keras.optimizers’.

在这里插入图片描述
问题分析:keras 库更新后无法按照原方式导入包,Adam 导入已更改。
解决办法:使用下面两行的代码代替掉第一行的代码。

在这里插入图片描述
问题2:AttributeError: module ‘keras.backend’ has no attribute ‘set_image_dim_ordering’.

在这里插入图片描述
问题分析:还是keras版本的原因,新版本中image_dim_drdering更改为了image_data_format.
解决办法:使用最后一行的代码代替掉第二行的代码。

在这里插入图片描述

参考连接

[1] Alexnet代码参考:http://t.csdn.cn/o0Bmo
[2] 数据集处理:https://blog.csdn.net/choose_lzn/article/details/89391102

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

解决win10开机卡顿、配置很高但是玩游戏卡顿掉帧等问题

解决win10开机卡顿、配置很高但是玩游戏卡顿掉帧等问题 最近组装了一台高配置的新电脑,装好了各种驱动、软件等。发现系统开机后卡顿一分钟左右(加载应用配置等),但是我的系统启动项明明就没多少,不应该是这样的情况&…

人工智能(AI)在金融行业的应用

人工智能(AI)技术在金融行业的应用日益广泛,为金融机构提供了更高效、更智能的解决方案。以下和大家分享AI在金融行业的一些主要应用,希望对大家有所帮助。北京木奇移动技术有限公司,专业的软件外包开发公司&#xff0…

Android 13(T) - binder阅读(5)- 使用ServiceManager注册服务2

上一篇笔记我们看到了binder_transaction,这个方法很长,这一篇我们将把这个方法拆分开来看binder_transaction做了什么,从而学习binder是如何跨进程通信的。 1 binder_transaction static void binder_transaction(struct binder_proc *proc…

Docker-DockerFile制定镜像

本文已收录于专栏 《中间件合集》 目录 概念说明DockerDockerFile 提供服务指令解析应用实例常用命令总结提升 概念说明 Docker &emspDocker是一种开源的容器化平台,它可以将应用程序及其依赖项打包到一个独立的、可移植的容器中,以实现快速部署和跨…

【0212】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 2)

文章目录 1. 回顾2. 密码校验通过3. 密码校验失败上一文:【0211】tcpdump抓包分析pg_hba.conf以password作为认证证方式下frontend与Backend之间身份验证过程(13 - 1) 1. 回顾 在上一节内容中,讲解了Backend对于接收到来自frontend的字符串明文密码,和来自于来自pg_auth…

【网络原理】TCP/IP协议五层模型

🥊作者:一只爱打拳的程序猿,Java领域新星创作者,CSDN、阿里云社区优质创作者。 🤼专栏收录于:计算机网络原理 本期讲解协议、OSI七层模型、TCP/IP五层模型、网络设备所在的分层、数据的封装和分佣。 目录 …

STM32速成笔记—RTC

文章目录 一、RTC简介二、STM32的RTC2.1 主要特性2.2 RTC框图介绍 三、访问后备区域步骤四、RTC配置步骤五、RTC程序配置5.1 RTC结构体定义5.2 RTC初始化函数5.3 设置年月日,时分秒5.4 判断闰年函数5.5 获取当前年月日,时分秒5.6 获取星期几5.7 中断服务…

ModaHub魔搭社区:安装、启动 Milvus 服务(GPU版)教程

目录 安装、启动 Milvus 服务 安装前提 操作系统 硬件 软件 确认 Docker 状态 拉取 Milvus 镜像 下载并修改配置文件 启动 Milvus Docker 容器 常见问题 接下来你可以 安装、启动 Milvus 服务 CPU 版 Milvus GPU 版 Milvus 安装前提 操作系统 操作系统 版本 Ce…

Windows下安装ClickHouse图文教程

文章目录 1.安装WSL21.1启用适用于 Linux 的 Windows 子系统1.2启用Windows虚拟机功能1.3将WSL2设置为默认版本1.4下载Linux内核更新包1.5安装Linux子系统1.6设置账户和密码 2.安装Docker2.1下载与安装2.2设置镜像地址 3.安装Clickhouse3.1拉取镜像3.2启动clickhouse-server3.3…

git常用命令之命令集

15. 命令集 场景1. 构造1个文件的10个commit 命令作用for i in {1..10}; do date >> 66.txt && git add . && git commit -sm "update"; done自证 场景2. 构造10个文件 命令作用for i in {1..10}; do date >> "file_$i.log&quo…

vue3+vite安装配置element-plus

配置 element-plus 1. 安装 yarn add element-plus element-plus/icons-vue2. 按需引入插件 yarn add unplugin-vue-components unplugin-auto-import -D3. 配置vite.config.ts // vite.config.ts import AutoImport from unplugin-auto-import/vite import Components fro…

logback日志的分片压缩

logback-spring.xml <?xml version"1.0" encoding"UTF-8"?> <configuration debug"true"><springProperty name"LOG_PATH" source"shands.log.logPath" defaultValue"/var/delonix/logs/local"…

Python 基本数据类型(一)

文章目录 每日一句正能量Python3 基本数据类型多个变量赋值标准数据类型结语 每日一句正能量 最宝贵的生命&#xff0c;是我的灵魂所在&#xff0c;也是我&#xff0c;赖以生存的&#xff0c;最基本的保障。有了生命&#xff0c;也就有了&#xff0c;我的光明&#xff0c;我的神…

数据分析案例-航空公司满意度数据可视化

&#x1f935;‍♂️ 个人主页&#xff1a;艾派森的个人主页 ✍&#x1f3fb;作者简介&#xff1a;Python学习者 &#x1f40b; 希望大家多多支持&#xff0c;我们一起进步&#xff01;&#x1f604; 如果文章对你有帮助的话&#xff0c; 欢迎评论 &#x1f4ac;点赞&#x1f4…

python---------xpath提取数据------打破局限

作者前言 欢迎小可爱们前来借鉴我的gtiee秦老大大 (qin-laoda) - Gitee.com 目录 为什么要学习XPATH和LXML类库 什么是XPATH 认识XML XML的节点关系 常⽤节点选择⼯具 节点选择语法 节点修饰语法 选择未知节点 lxml库 _____________________________________________…

MySQL 高级(进阶) SQL 语句

目录 创建两个表格 location 表格​编辑 store_info 表格​编辑 ---- SELECT ---- ---- DISTINCT ---- ---- WHERE ---- ---- AND OR ---- ---- IN ---- ---- BETWEEN ---- ---- 通配符 ---- ---- LIKE ---- ---- ORDER BY ---- ---- 函数 ---- ---- GROUP BY ---- ----…

最新ai创作系统CHATGPT镜像系统源码+支持GPT4.0+支持ai绘画(MJ)+实时语音识别输入+免费更新版本

AI系统CHATGPT镜像程序源码支持GPT4支持ai绘画实时语音识别输入免费更新版本 一、AI创作系统二、系统介绍三、系统程序下载四、安装教程五、主要功能展示六、更新日志 一、AI创作系统 1、提问&#xff1a;程序已经支持GPT3.5、GPT4.0接口、支持新建会话&#xff0c;上下文记忆…

Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境

Windows11安装oneAPI和Visual Studio 2022配置Fortran并行环境 安装Visual Studio 2022 Community安装oneAPI建立Fortran工程项目测试建立单核运行的Fortran运行算例建立并行运行的Fortran运行算例 结语 安装Visual Studio 2022 Community 访问微软Visual Studio官网&#xff…

【java】HashMap扩容机制详解

文章目录 JDK1.7下的扩容机制JDK1.8下的扩容机制 JDK1.7下的扩容机制 JDK1.7下的resize()方法是这样的&#xff1a; void resize(int newCapacity) { Entry[] oldTable table; int oldCapacity oldTable.length; if (oldCapacity MAXIMUM_CAPACITY) { threshold Integer.…

git上传云效codeup

为了标识身份&#xff0c;建议先完成 Git 全局设置 git config --global user.name "xxx" git config --global user.email "xxxxxxqq.com" 1.删除本地 .git文件夹 2.云效上 添加库-新建代码库 3.在 git bash 里 按照 建好的代码库 下方的 命令行指引-…