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


在这里插入图片描述

一.配置环境

搭建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层从输入特征中学到的是全局模式的,而卷积更能学习到局部模式的信息。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雪中奇侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值