深入图像分类:使用美国手语数据集训练定制化神经网络

引言

在前一篇博客中,我们探讨了如何使用MNIST数据集训练一个基础的神经网络来进行手写数字识别。在本文中,我们将更进一步,使用美国手语字母表(ASL)数据集来构建一个定制化的图像分类模型。通过这个过程,你将学习到如何准备数据、构建模型、以及对模型进行训练和评估。

美国手语数据集简介

美国手语(ASL)是一种复杂的视觉语言,它包含了26个字母的手语表示。在本练习中,我们将使用一个包含这些字母图像的数据集,该数据集类似于MNIST,但对我们的模型来说更具挑战性。

数据准备

与MNIST数据集不同,ASL数据集需要我们手动加载和准备数据。我们将使用Pandas库来读取CSV格式的数据集,并使用matplotlib来可视化数据。
在这里插入图片描述

import pandas as pd
import matplotlib.pyplot as plt

# 读取训练和验证数据集
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

# 数据可视化
plt.figure(figsize=(10,10))
for i in range(9):
    plt.subplot(3, 3, i+1)
    image = x_train[i].reshape(28, 28)
    plt.title(y_train[i], fontdict={'fontsize': 20})
    plt.axis('off')
    plt.imshow(image, cmap='gray')
plt.show()

数据归一化和分类编码

在训练模型之前,我们需要对图像数据进行归一化,并将标签转换为分类编码的形式。

from tensorflow.keras.utils import to_categorical

# 数据归一化
x_train = x_train / 255.0
x_valid = x_valid / 255.0

# 标签分类编码
num_classes = 24
y_train = to_categorical(y_train, num_classes)
y_valid = to_categorical(y_valid, num_classes)

构建模型

我们将构建一个包含两个隐藏层的神经网络模型,使用ReLU作为激活函数,并在输出层使用softmax函数。

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

model = Sequential()
model.add(Dense(units=512, activation='relu', input_shape=(784,)))
model.add(Dense(units=512, activation='relu'))
model.add(Dense(units=num_classes, activation='softmax'))

在这里插入图片描述

编译和训练模型

模型编译后,我们将使用交叉熵作为损失函数,并跟踪准确率指标。

model.compile(loss='categorical_crossentropy', metrics=['accuracy'])

# 训练模型
history = model.fit(x_train, y_train, epochs=20, verbose=1, validation_data=(x_valid, y_valid))

结果讨论

训练过程中,我们可能会观察到模型在训练集上的准确率较高,但在验证集上的表现不佳。这可能是过拟合的迹象,即模型对训练数据过度拟合,而未能很好地泛化到未见数据。
在这里插入图片描述

结语

通过本文,你学习了如何处理新的数据集,并构建了一个针对特定任务的神经网络模型。在接下来的教程中,我们将探索卷积神经网络,这是一种在图像分类任务中更为强大的模型。

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-05-03 08:00:38       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-05-03 08:00:38       106 阅读
  3. 在Django里面运行非项目文件

    2024-05-03 08:00:38       87 阅读
  4. Python语言-面向对象

    2024-05-03 08:00:38       96 阅读

热门阅读

  1. 洛谷 P1012 [NOIP1998 提高组] 拼数 (排序,贪心)

    2024-05-03 08:00:38       35 阅读
  2. INNODB和MyISAM有什么区别

    2024-05-03 08:00:38       38 阅读
  3. Stream流入门,Stream流创建

    2024-05-03 08:00:38       27 阅读
  4. Circuits--Sequential--Finite7

    2024-05-03 08:00:38       35 阅读
  5. Vagrant CentOS7 安装 Docker 及使用 Docker 安装 MySQL

    2024-05-03 08:00:38       30 阅读
  6. PostgreSQL自带的命令行工具02- createdb

    2024-05-03 08:00:38       33 阅读
  7. PostgreSQL日期和时间相关函数

    2024-05-03 08:00:38       34 阅读
  8. 身份证号对应地区信息-MySQL

    2024-05-03 08:00:38       30 阅读
  9. 最大似然估计(通俗讲解)

    2024-05-03 08:00:38       27 阅读
  10. 2012NOIP普及组真题 4. 文化之旅

    2024-05-03 08:00:38       41 阅读
  11. 【设计模式】16、state 状态模式

    2024-05-03 08:00:38       27 阅读
  12. React使用 lodash-es 中的throttle方法失效

    2024-05-03 08:00:38       34 阅读