基于Kera框架的手写数字识别

基于Kera框架的手写数字识别

  • 一.配置环境
  • 二.具体步骤
    • 2.1 导入数据集
    • 2.2 创建网络图层和网络结构
    • 2.3 定义反向传播函数与优化函数
    • 2.4 数据集和测试集归一化
    • 2.5 标签制作
  • 三整体代码与验证
  • 四.使用卷积神经网络进行优化

基于Kera框架的手写数字识别_第1张图片

一.配置环境

搭建Ananconda环境和安装软件包教程如下:
一篇文章带你告别 Could not find a version that satisfies the requirement XXX

pip install keras
pip install tensorflow

二.具体步骤

2.1 导入数据集

from keras.datasets import mnist
(train_images, train_labels) , (test_images, test_labels) = mnist.load_data()

2.2 创建网络图层和网络结构

from keras import  models
from keras import  layers
network = models.Sequential()
network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))
network.add(layers.Dense(10,activation='softmax'))

2.3 定义反向传播函数与优化函数

from keras.datasets import mnist
(train_images, train_labels) , (test_images, test_labels) = mnist.load_data()

2.4 数据集和测试集归一化

train_images = train_images.reshape((60000,28*28))
train_images = train_images.astype('float32')/255
test_images = test_images.reshape((10000,28*28))
test_images = test_images.astype('float32')/255

2.5 标签制作

from keras.utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)

三整体代码与验证

from keras.datasets import mnist
(train_images, train_labels) , (test_images, test_labels) = mnist.load_data()
from keras import  models
from keras import  layers
network = models.Sequential()
network.add(layers.Dense(512,activation='relu',input_shape=(28*28,)))
network.add(layers.Dense(10,activation='softmax'))
network.compile(optimizer='rmsprop',
                loss= 'categorical_crossentropy',
                metrics='accuracy')
train_images = train_images.reshape((60000,28*28))
train_images = train_images.astype('float32')/255
test_images = test_images.reshape((10000,28*28))
test_images = test_images.astype('float32')/255
from keras.utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
if __name__ == '__main__':
    network.fit(train_images,train_labels,epochs= 5, batch_size= 128)
    test_loss,test_acc =network.evaluate(test_images,test_labels)
    print('test_acc:',test_acc)
Epoch 1/5
469/469 [==============================] - 3s 5ms/step - loss: 0.2667 - accuracy: 0.9239
Epoch 2/5
469/469 [==============================] - 3s 5ms/step - loss: 0.1056 - accuracy: 0.9691
Epoch 3/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0701 - accuracy: 0.9789
Epoch 4/5
469/469 [==============================] - 2s 5ms/step - loss: 0.0501 - accuracy: 0.9848
Epoch 5/5
469/469 [==============================] - 3s 5ms/step - loss: 0.0376 - accuracy: 0.9888
313/313 [==============================] - 1s 2ms/step - loss: 0.0704 - accuracy: 0.9784
test_acc: 0.9783999919891357

四.使用卷积神经网络进行优化

重新定义网络

network = models.Sequential()
network.add(layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)))
network.add(layers.MaxPool2D(2,2))
network.add(layers.Conv2D(64,(3,3),activation='relu'))
network.add(layers.MaxPool2D(2,2))
network.add(layers.Conv2D(64,(3,3),activation='relu'))
network.add(layers.Flatten())
network.add(layers.Dense(64,activation='relu'))
network.add(layers.Dense(10,activation='softmax'))

进行验证

test_acc: 0.9901999831199646

密集连接层和卷积层的根本区别在于Dense层从输入特征中学到的是全局模式的,而卷积更能学习到局部模式的信息。

你可能感兴趣的:(深度学习,深度学习,tensorflow,python)