MNIST手写数字辨识

多层感知器

相关库

import matplotlib.pyplot as plt
import numpy as np
from keras.datasets import mnist
from keras.layers import Dense
from keras.models import Sequential
from keras.utils import np_utils

加载数据

file = mnist.load_data()
# tuple类型
# 包含训练集:特征(60000,28,28),标签(60000,)
# 测试集:特征(10000,28,28),标签(10000,)
x_test, y_test = file[0][0], file[0][1]
x_train, y_train = file[1][0], file[1][1]
picture_size = x_train.shape[1] * x_train.shape[2]  # 图片大小

画图

def plot_(size=4):
    # 分块显示size张图片
    for i in range(size):
        plt.subplot(size ** 0.5, size ** 0.5, i + 1)
        plt.imshow(x_train[i], cmap=plt.get_cmap('gray'))
    plt.show()

数据预处理

def preprocess(data, process_x=True):
    # x转换成二维数组,并进行归一化(0-1)
    # y进行one-hot 编码
    if process_x == True:
        data = np.array(data).reshape((data.shape[0], picture_size)).astype('float32')  # 保留小数位
        data = data / 255
    else:
        data = np_utils.to_categorical(data)  # one-hot编码
    return data
x_train = preprocess(x_train, process_x=True)  # (10000, 784)
x_test = preprocess(x_test, process_x=True)  # (60000, 784)
y_train = preprocess(y_train, process_x=False)  # (10000, 10)
y_test = preprocess(y_test, process_x=False)  # (60000, 10)

创建、训练模型、精度评价

def MLP_model():
    # 创建模型
    model = Sequential([
        Dense(input_dim=picture_size, units=picture_size, activation='relu'),
        Dense(units=picture_size, activation='relu'),
        Dense(units=10, activation='softmax')
    ])
    #     模型编译
    model.compile(loss='categorical_crossentropy',
                  optimizer='adam',
                  metrics=['accuracy'])
    #     训练模型
    model.fit(x_train, y_train, batch_size=100, epochs=20)
    #     精度评价
    result_1 = model.evaluate(x_train, y_train, batch_size=200)
    print('train accuracy:', result_1[1])
    result_2 = model.evaluate(x_test, y_test, batch_size=200)
    print('test accuracy:', result_2[1])
model=MLP_model()
train accuracy: 1.0
  200/60000 [..............................] - ETA: 2s
 1000/60000 [..............................] - ETA: 3s
 2200/60000 [>.............................] - ETA: 3s
 3400/60000 [>.............................] - ETA: 3s
 5200/60000 [=>............................] - ETA: 2s
 7400/60000 [==>...........................] - ETA: 2s
 9200/60000 [===>..........................] - ETA: 1s
11000/60000 [====>.........................] - ETA: 1s
12600/60000 [=====>........................] - ETA: 1s
14200/60000 [======>.......................] - ETA: 1s
15800/60000 [======>.......................] - ETA: 1s
17200/60000 [=======>......................] - ETA: 1s
19200/60000 [========>.....................] - ETA: 1s
21000/60000 [=========>....................] - ETA: 1s
22800/60000 [==========>...................] - ETA: 1s
24600/60000 [===========>..................] - ETA: 1s
26400/60000 [============>.................] - ETA: 1s
28200/60000 [=============>................] - ETA: 1s
30200/60000 [==============>...............] - ETA: 0s
32400/60000 [===============>..............] - ETA: 0s
35000/60000 [================>.............] - ETA: 0s
38000/60000 [==================>...........] - ETA: 0s
40800/60000 [===================>..........] - ETA: 0s
43800/60000 [====================>.........] - ETA: 0s
46200/60000 [======================>.......] - ETA: 0s
47000/60000 [======================>.......] - ETA: 0s
48400/60000 [=======================>......] - ETA: 0s
49600/60000 [=======================>......] - ETA: 0s
51200/60000 [========================>.....] - ETA: 0s
52400/60000 [=========================>....] - ETA: 0s
54200/60000 [==========================>...] - ETA: 0s
56800/60000 [===========================>..] - ETA: 0s
59400/60000 [============================>.] - ETA: 0s
60000/60000 [==============================] - 2s 29us/step
test accuracy: 0.9621833562850952

参考:
1.台湾大学李宏毅手写数字辨识课堂演示demo
2.keras实现mnist数据集手写数字识别

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
MNIST手写数字数据集是机器学习和深度学习中常用的数据集之一,其中包含了一系列的手写数字图片,每张图片的大小为28x28像素,范围从0到9。卷积神经网络(Convolutional Neural Network,CNN)是一种深度学习模型,适用于图像识别任务。 为了实现MNIST手写数字的CNN,首先需要构建一个卷积神经网络模型。该模型可以包含多个卷积层和池化层,以及全连接层和输出层。卷积层和池化层的作用是提取图像特征,全连接层则用于分类。 具体步骤如下: 1. 数据准备:将MNIST手写数字数据集载入到程序中,并进行数据预处理。预处理包括将像素值标准化到0到1之间,以及将标签(0到9之间的数字)转换成向量形式,方便模型进行分类。 2. 模型构建:使用Keras等深度学习框架,在代码中定义卷积神经网络模型的结构。可以选择合适的卷积核大小、池化核大小、激活函数等参数。 3. 模型训练:使用MNIST训练集对构建好的CNN模型进行训练。在训练过程中,使用优化算法(如Adam)和损失函数(如交叉熵损失函数)来优化模型的权重和偏置。 4. 模型评估:使用MNIST测试集对训练好的模型进行评估。评估指标可以选择准确率或者其他更适合的指标。 5. 模型预测:可以使用该模型对新的手写数字图像进行预测。输入预处理后的图像,并通过模型得到分类结果。 通过这样的步骤,可以对MNIST手写数字数据集进行卷积神经网络的训练和预测。经过足够的训练和调节,CNN模型可以达到较高的准确率,成为一个可靠的手写数字识别工具。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值