提升图像识别性能:探索卷积神经网络与美国手语数据集

引言

在深度学习的世界里,卷积神经网络(CNN)已经成为了图像识别任务的主力军。继上一篇博客中我们使用基础神经网络对手写数字进行分类后,本文将介绍如何利用CNN的强大能力,对更加复杂的美国手语(ASL)数据集进行图像分类。

卷积神经网络的基础

CNN是一种深度学习模型,它特别适合处理图像数据。通过使用卷积层来提取图像特征,CNN能够捕捉到图像的层次性信息,从而在图像分类任务中表现出色。

数据准备

首先,我们需要对ASL数据集进行适当的预处理,以适应CNN模型。

import tensorflow.keras as keras
import pandas as pd# 加载CSV文件中的数据
train_df = pd.read_csv("data/asl_data/sign_mnist_train.csv")
valid_df = pd.read_csv("data/asl_data/sign_mnist_valid.csv")# 分离标签和图像数据
y_train = train_df['label']
y_valid = valid_df['label']
x_train = train_df.drop('label', axis=1).values
x_valid = valid_df.drop('label', axis=1).values# 将标签转换为独热编码
num_classes = 24
y_train = keras.utils.to_categorical(y_train, num_classes)
y_valid = keras.utils.to_categorical(y_valid, num_classes)# 归一化图像数据
x_train = x_train / 255.0
x_valid = x_valid / 255.0# 重构图像数据以匹配CNN的输入要求
x_train = x_train.reshape(-1, 28, 28, 1)
x_valid = x_valid.reshape(-1, 28, 28, 1)

创建CNN模型

接下来,我们将构建一个CNN模型,它包含多个卷积层、池化层、归一化层和dropout层,以及最后的全连接层。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPool2D, Flatten, Dense, Dropout, BatchNormalizationmodel = Sequential()
# 卷积层,使用ReLU激活函数和'same'填充
model.add(Conv2D(75, (3, 3), strides=1, padding='same', activation='relu', input_shape=(28, 28, 1)))
model.add(BatchNormalization())  # 批量归一化
model.add(MaxPool2D((2, 2), strides=2, padding='same'))  # 最大池化层# 添加更多的卷积层和池化层
model.add(Conv2D(50, (3, 3), strides=1, padding='same', activation='relu'))
model.add(Dropout(0.2))  # 随机失活一部分神经元以防止过拟合
model.add(BatchNormalization())
model.add(MaxPool2D((2, 2), strides=2, padding='same'))model.add(Conv2D(25, (3, 3), strides=1, padding='same', activation='relu'))
model.add(BatchNormalization())
model.add(MaxPool2D((2, 2), strides=2, padding='same'))# 展平层,将三维输出一维化
model.add(Flatten())
# 全连接层
model.add(Dense(units=512, activation='relu'))
model.add(Dropout(0.3))  # 再次使用dropout
# 输出层,使用softmax激活函数进行多分类
model.add(Dense(units=num_classes, activation='softmax'))

编译和训练模型

在模型构建完成后,我们需要对其进行编译,并使用训练数据进行训练。

model.compile(loss='categorical_crossentropy', metrics=['accuracy'])# 使用验证数据训练模型
history = model.fit(x_train, y_train, epochs=10, verbose=1, validation_data=(x_valid, y_valid))

结果讨论

通过训练,我们可以看到CNN模型在训练集和验证集上都取得了很高的准确率,这表明CNN能够有效地从图像中提取特征,并对手语数据集进行分类。

结语

在本博客中,我们学习了如何使用CNN对ASL数据集进行图像分类。CNN通过其卷积层的强大特征提取能力,在图像识别任务中展现了其优越性。在接下来的教程中,我们将进一步探索CNN的高级主题,包括数据增强和其他优化技术。


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

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

相关文章

简单两步将Lllama、Qwen等开源大模型安装到自己的电脑上

现在已经有非常多优秀的开源大语言模型了,比如Command R、Mistral、Qwen、MiniMax、Baichuan、Phi3等,其中Lllama3和Qwen等已经和GPT4的性能比较接近了。 如果能把这些免费的开源大模型部署到本地电脑或手机上,可以完全自由的使用&#xff0…

js之永久定时器

在JavaScript编程中,定时器是一种常见的工具,用于在指定的时间间隔内重复执行特定的代码。永久性定时器是其中一种类型,它会在设定的时间间隔内重复执行,直到被明确停止。本文将介绍如何在JavaScript中创建和使用永久性定时器。 …

嵌入式学习68-C++(运算符重载和虚函数)

知识零碎: cin >> n 相当于scanf C系统提供的6种基本函数 …

深入探索van Emde Boas树:原理、操作与C语言实现

van Emde Boas (vEB) 树是一种高效的数据结构,用于处理整数集合。它是由荷兰计算机科学家Jan van Emde Boas在1977年提出的。vEB树在处理整数集合的查找、插入、删除和迭代操作时,能够以接近最优的时间复杂度运行。vEB树特别适合于那些元素数量在某个较小…

【边东随笔】(2) “顶级掠食者” 的生存智慧:信心 | 狠心 | 耐心

(北美鳄龟, Alligator Snapper) "优雅,且致命。" 非常谨慎,在水域中会先找到躲避将自身安置于有利地形。浮出水面换气,水体稍有异动就会退回水中,优秀掠食者对自身优势牢牢的把握( 信…

掌握Android Fragment开发之魂:Fragment的深度解析(中)

在上一篇文章中,我们深入探讨Fragment的核心特性、优势、生命周期,以及如何通过静态和动态使用Fragment。感兴趣的朋友,请前往查阅: 掌握Android Fragment开发之魂:Fragment的深度解析(上) 。 在…

hadoop学习---基于Hive的教育平台数据仓库分析案例(二)

衔接第一部分,第一部分请点击:基于Hive的教育平台数据仓库分析案例(一) 意向用户模块(全量分析): 需求指标: 需求一: 计期内,新增意向客户(包含自己录入的意…

AI学习指南线性代数篇-向量和矩阵

AI学习指南线性代数篇-向量和矩阵 在人工智能领域,线性代数是一门非常重要的数学基础课程,而向量和矩阵又是线性代数中最基础的概念之一。在本篇博客中,我们将深入探讨向量和矩阵的概述、在AI中的使用场景、定义和意义以及相关的公式讲解。 …

kraken2 最新版安装,极简模式

kraken2 git clone https://github.com/DerrickWood/kraken2.gitcd kraken2./install_kraken2.sh /opt/krakenvim .bashrc ---------------- # Kraken export PATH"/opt/kraken:$PATH" ----------------source .bashrc Note: 不晓得是不是我设置了清华源&#xff0c…

mysql相关知识点

1、将时间格式化为字符串 SELECT DATE_FORMAT(NOW(), %Y-%m-%d %H:%i:%s) 2、获取当前时间(年、月、日、时、分、秒) SELECT NOW() 或者 SELECT CURRENT_TIMESTAMP() ; 3、获取当前时间,精确到毫秒 SELECT NOW(3) 或者 SELECT CURRENT_…

下载源代码并交叉编译riscv FreeBSD系统和内核

RISCV系统曾经让人神秘到无法接触,交叉编译更是只有耳闻,现在随着RISCV的普及,它们神秘的面纱已经被慢慢揭开。 交叉编译作为RISCV系统中的一个重要环节,也随着RISCV的普及而变得更加容易理解和操作。交叉编译允许开发者在一个平…

LeetCode算法题:8.字符串转换整数 (atoi)

请你来实现一个 myAtoi(string s) 函数,使其能将字符串转换成一个 32 位有符号整数(类似 C/C 中的 atoi 函数)。 函数 myAtoi(string s) 的算法如下: 读入字符串并丢弃无用的前导空格检查下一个字符(假设还未到字符末…

Springboot开发开发技术以及易错点调整-21

了解IOC和DI Ioc(Inversion of Control)控制反转 在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。理解好Ioc的关键是要明白以下两点: 谁控制谁,控制什么?是由Ioc容器来控…

质数是无穷的吗?

质数是无穷的吗?还是存在一个最大的质数,一旦超过这个质数后,每个比它大的数都可以表示为我们已知质数的乘积?欧几里得本人最先提出这个问题,他以一种极其简单而优雅的方式,指出质数有无穷多个,…

Jenkins的原理及应用详解(二)

本系列文章简介: Jenkins是一种自动化构建工具,它的出现使得软件开发过程变得更加高效、可靠和可持续。它采用了一种事件驱动的架构,能够通过触发不同的事件来执行相应的构建任务和操作。Jenkins支持多种版本控制系统的集成,可以自…

WordPress原创插件:当日24小时发布文章标题变红

WordPress原创插件&#xff1a;当日24小时发布文章标题变红 <?php// 添加自定义样式 function title_red_plugin_styles() {$current_time time();$post_time get_the_time(U);$time_difference $current_time - $post_time;if ($time_difference < 86400) {echo&l…

24_Scala集合Map

文章目录 Scala集合Map1.构建Map2.增删改查3.Map的get操作细节 Scala集合Map –默认immutable –概念和Java一致 1.构建Map –创建kv键值对 && kv键值对的表达 –创建immutable map –创建mutable map //1.1 构建一个kv键值对 val kv "a" -> 1 print…

Web开发:如何将元素边框的直角框设为圆角框

将元素边框的直角框设为圆角框 介绍举例总结 介绍 在Web开发中&#xff0c;我们可以使用CSS的border-radius属性将直角框&#xff08;矩形&#xff09;设为圆角框。border-radius属性允许我们设置一个或多个值&#xff0c;这些值定义了元素边框角的半径。 举例 设置一个值&a…

Web3智能物联网:科技连接的未来世界

在当今科技飞速发展的时代&#xff0c;Web3智能物联网正逐渐成为人们关注的焦点。随着区块链技术的不断成熟和普及&#xff0c;以及物联网的普及和应用&#xff0c;Web3智能物联网作为二者的结合&#xff0c;将为未来的数字世界带来革命性的变化。本文将深入探讨Web3智能物联网…

二十、Java的反射机制

1、Java反射机制的概念 所谓反射从程序的运行结果来看也很好理解,即可以通过对象反射求出类的名称。如下: 正常方式:引入需要的“包.类”名称---->通过new实例化----->取得实例化对象。 反射方式:实例化对象---->getClass()方法------>得到完整的“包.类”名…