MNIST(“Modified National Institute of Standards and Technology”)是一个广泛使用的计算机视觉基准数据集。自1999年发布以来,这个经典的手写数字数据集一直是分类算法研究的基础。MNIST 数据集由数千张手写数字图像组成,这些图像的尺寸均为28x28像素,涵盖了从0到9的所有数字。
数据文件 train.csv 和 test.csv 包含了这些手写数字的灰度图像。每张图像由784个像素值组成,每个像素值代表图像中该位置的亮度,范围在0到255之间。
训练数据集 (train.csv) 有785列,第一列表示图像对应的数字标签,其余784列分别对应每个像素的亮度值。测试数据集 (test.csv) 结构与训练集相同,但没有标签列。
提交文件应包含两列:ImageId 和 Label,分别表示测试集中的图像编号和预测的数字。例如,如果你预测第一张图像是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数据集上的表现非常出色,可以准确地识别大部分手写数字。