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

发布于:2024-05-03 ⋅ 阅读:(31) ⋅ 点赞:(0)

引言

在前一篇博客中,我们探讨了如何使用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))

结果讨论

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

结语

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


网站公告

今日签到

点亮在社区的每一天
去签到