CNN数字图像识别项目Digit Recognizer with CNN for beginner
作者头像
  • 吴盛
  • 2022-08-03 18:07:32 8

准备工作

MNIST 数据集介绍

MNIST(“Modified National Institute of Standards and Technology”)是一个广泛使用的计算机视觉基准数据集。自1999年发布以来,这个经典的手写数字数据集一直是分类算法研究的基础。MNIST 数据集由数千张手写数字图像组成,这些图像的尺寸均为28x28像素,涵盖了从0到9的所有数字。

数据文件 train.csvtest.csv 包含了这些手写数字的灰度图像。每张图像由784个像素值组成,每个像素值代表图像中该位置的亮度,范围在0到255之间。

数据集文件结构

训练数据集 (train.csv) 有785列,第一列表示图像对应的数字标签,其余784列分别对应每个像素的亮度值。测试数据集 (test.csv) 结构与训练集相同,但没有标签列。

提交文件格式

提交文件应包含两列:ImageIdLabel,分别表示测试集中的图像编号和预测的数字。例如,如果你预测第一张图像是3,第二张图像是7,第三张图像是8,那么提交文件将如下所示:

ImageId,Label 1,3 2,7 3,8 ...

评估指标

本次比赛的评估指标是分类准确率,即测试图像被正确分类的比例。例如,0.97的分类准确率表示除3%的图像外,其余图像均被正确分类。

导入库

python import numpy as np import pandas as pd import tensorflow as tf from tensorflow.keras.layers import Conv2D, MaxPooling2D, BatchNormalization, Flatten, Dense from tensorflow.keras.models import Sequential

数据加载

python train = pd.read_csv('../input/digit-recognizer/train.csv') test = pd.read_csv('../input/digit-recognizer/test.csv')

数据预览

python print(train.head()) print(train.info()) print(train.isnull().sum().sum())

数据处理

```python ytrain = train['label'] Xtrain = train.drop('label', axis=1)

对像素值进行归一化处理

Xtrain = Xtrain.values / 255.0 X_test = test.values / 255.0

将数据重塑为适合卷积神经网络的形状

Xtrain = Xtrain.reshape(-1, 28, 28, 1) Xtest = Xtest.reshape(-1, 28, 28, 1)

将标签转换为独热编码

ytrain = pd.getdummies(y_train).values ```

构建卷积神经网络模型

```python model = Sequential()

添加卷积层

model.add(Conv2D(filters=256, kernelsize=(5,5), activation='relu', inputshape=(28, 28, 1))) model.add(MaxPooling2D(pool_size=(3,3), strides=3)) model.add(BatchNormalization())

添加第二个卷积层

model.add(Conv2D(filters=128, kernelsize=(4,4), activation='relu')) model.add(MaxPooling2D(poolsize=(2,2), strides=2))

展平层

model.add(Flatten())

全连接层

model.add(Dense(units=256, activation='relu'))

输出层

model.add(Dense(units=10, activation='softmax'))

编译模型

model.compile(optimizer='adam', loss='categorical_crossentropy') ```

训练模型

python model.fit(X_train, y_train, batch_size=32, epochs=50)

预测测试集

python predictions = model.predict(X_test) predicted_labels = np.argmax(predictions, axis=1)

生成提交文件

```python submission = pd.DataFrame({ 'ImageId': range(1, len(predictedlabels) + 1), 'Label': predictedlabels })

submission.to_csv('submission.csv', index=False) ```

模型性能

此模型的最终准确率为0.98857。该模型在MNIST数据集上的表现非常出色,可以准确地识别大部分手写数字。

    本文来源:图灵汇
责任编辑: : 吴盛
声明:本文系图灵汇原创稿件,版权属图灵汇所有,未经授权不得转载,已经协议授权的媒体下载使用时须注明"稿件来源:图灵汇",违者将依法追究责任。
    分享
RecognizerCNN识别beginner图像数字项目Digitwith
    下一篇