本文介绍了利用keras做mnist数据集的手写数字识别。
参考网址 http://www.cnblogs.com/lc1217/p/7132364.html
mnist数据集中的图片为28*28的单通道黑白图片。

详细代码

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Fri Apr 26 11:07:39 2019@author: allenlz
"""import numpy as np
from keras.datasets import mnist
from keras.models import Sequential, Model
from keras.layers import Convolution2D, Dense, Activation, Flatten, MaxPool2D
from keras.utils import np_utils
from keras.optimizers import Adam# 1.load mnist data
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 2.reshape the 2-D to 1-D, to a 1-D vector
x_train = x_train.reshape(len(x_train), 28, 28, 1)
x_test = x_test.reshape(len(x_test), 28, 28, 1)# 3.reshape type to float32
x_train = x_train.astype('float32')
y_test = y_test.astype('float32')# 4.normalize data to [0, 1]
x_train = x_train/255
x_test = x_test/255# 5.one-hot encoding
nb_class = 10
y_train = np_utils.to_categorical(y_train, nb_class)
y_test = np_utils.to_categorical(y_test, nb_class)   # 6.build the CNN model
model = Sequential()
# 1st cnn layer
model.add(Convolution2D(filters=64,         # 64 kernelskernel_size=[5, 5], # kernel size = 5 * 5padding='same',     # paddinginput_shape=(28,28,1), kernel_initializer='he_normal',name = 'cnn_l1'
))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2, 2),   # pooling sizestrides=(2, 2),     # stridespadding='same',
))
# 2nd cnn layer
model.add(Convolution2D(filters=32,           # 64 kernelskernel_size=[5, 5],   # kernel size = 5 * 5padding='same',       # paddingname = 'cnn_l2',kernel_initializer='he_normal'
))
model.add(Activation('relu'))
model.add(MaxPool2D(pool_size=(2, 2),   # pooling sizestrides=(2, 2),     # stridespadding='same',     # padding
))
# fully connected layer
model.add(Flatten())    # flat
model.add(Dense(1024))
model.add(Activation('relu'))model.add(Dense(10))
model.add(Activation('softmax'))# output the model structure
model.summary()
# optimize way and learning rate
adam = Adam(lr=1e-4)
# define optimizer, loss and metrics
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])
# train the model
nb_epoch = 10
batchsize = 64
model.fit(x = x_train,    # original datay = y_train,    # labels of original dataepochs = nb_epoch,batch_size = batchsize,validation_data = (x_test, y_test))# evaluate the trained model in training set
score = model.evaluate(x_train, y_train, verbose=0)
print('Train loss:', score[0])
print('Train accuracy:', score[1])# evaluate the trained model in test set
score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

模型结构

Layer (type)                 Output Shape              Param #
=================================================================
cnn_l1 (Conv2D)              (None, 28, 28, 64)        1664
_________________________________________________________________
activation_3 (Activation)    (None, 28, 28, 64)        0
_________________________________________________________________
max_pooling2d_2 (MaxPooling2 (None, 14, 14, 64)        0
_________________________________________________________________
cnn_l2 (Conv2D)              (None, 14, 14, 32)        51232
_________________________________________________________________
activation_4 (Activation)    (None, 14, 14, 32)        0
_________________________________________________________________
max_pooling2d_3 (MaxPooling2 (None, 7, 7, 32)          0
_________________________________________________________________
flatten_1 (Flatten)          (None, 1568)              0
_________________________________________________________________
dense_1 (Dense)              (None, 1024)              1606656
_________________________________________________________________
activation_5 (Activation)    (None, 1024)              0
_________________________________________________________________
dense_2 (Dense)              (None, 10)                10250
_________________________________________________________________
activation_6 (Activation)    (None, 10)                0
=================================================================
Total params: 1,669,802
Trainable params: 1,669,802
Non-trainable params: 0

运行结果

Train on 60000 samples, validate on 10000 samples
Epoch 1/10
60000/60000 [==============================] - 140s 2ms/step - loss: 0.2011 - acc: 0.9418 - val_loss: 0.0696 - val_acc: 0.9784
Epoch 2/10
60000/60000 [==============================] - 139s 2ms/step - loss: 0.0596 - acc: 0.9818 - val_loss: 0.0418 - val_acc: 0.9868
Epoch 3/10
60000/60000 [==============================] - 139s 2ms/step - loss: 0.0406 - acc: 0.9875 - val_loss: 0.0325 - val_acc: 0.9885
Epoch 4/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0314 - acc: 0.9899 - val_loss: 0.0378 - val_acc: 0.9869
Epoch 5/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0242 - acc: 0.9925 - val_loss: 0.0301 - val_acc: 0.9893
Epoch 6/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0192 - acc: 0.9942 - val_loss: 0.0261 - val_acc: 0.9913
Epoch 7/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0150 - acc: 0.9954 - val_loss: 0.0280 - val_acc: 0.9904
Epoch 8/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0134 - acc: 0.9957 - val_loss: 0.0291 - val_acc: 0.9905
Epoch 9/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0097 - acc: 0.9971 - val_loss: 0.0238 - val_acc: 0.9920
Epoch 10/10
60000/60000 [==============================] - 138s 2ms/step - loss: 0.0085 - acc: 0.9977 - val_loss: 0.0254 - val_acc: 0.9912
Train loss: 0.006155262773358845
Train accuracy: 0.9984666666666666
Test loss: 0.025420136153507338
Test accuracy: 0.9912

深度学习入门实例——基于keras的mnist手写数字识别相关推荐

  1. 深度学习案例之基于 CNN 的 MNIST 手写数字识别

    一.模型结构 本文只涉及利用Tensorflow实现CNN的手写数字识别,CNN的内容请参考:卷积神经网络(CNN) MNIST数据集的格式与数据预处理代码input_data.py的讲解请参考 :T ...

  2. 1、基于Keras、Mnist手写数字识别数据集构建全连接(FC)神经网络训练模型

    文章目录 前言 一.MNIST数据集是什么? 二.构建神经网络训练模型 1.导入库 2.载入数据 3.数据处理 4.创建模型 5.编译模型 6.训练模型 7.评估模型 三.总代码 前言 提示: 1.本 ...

  3. 深度学习入门项目:PyTorch实现MINST手写数字识别

    完整代码下载[github地址]:https://github.com/lmn-ning/MNIST_PyTorch.git 目录 一.MNIST数据集介绍及下载地址 二.代码结构 三.代码 data ...

  4. TensorFlow高阶 API: keras教程-使用tf.keras搭建mnist手写数字识别网络

    TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字识别网络 目录 TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字 ...

  5. 基于K210的MNIST手写数字识别

    基于K210的MNIST手写数字识别 项目已开源链接: Github. 硬件平台 采用Maixduino开发板 在sipeed官方有售 软件平台 使用MaixPy环境进行单片机的编程 官方资源可在这里 ...

  6. 使用tf.keras搭建mnist手写数字识别网络

    使用tf.keras搭建mnist手写数字识别网络 目录 使用tf.keras搭建mnist手写数字识别网络 1.使用tf.keras.Sequential搭建序列模型 1.1 tf.keras.Se ...

  7. 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念

    深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...

  8. tensorflow saver_机器学习入门(6):Tensorflow项目Mnist手写数字识别-分析详解

    本文主要内容:Ubuntu下基于Tensorflow的Mnist手写数字识别的实现 训练数据和测试数据资料:http://yann.lecun.com/exdb/mnist/ 前面环境都搭建好了,直接 ...

  9. mnist手写数字识别python_基于tensorflow的MNIST手写数字识别(二)--入门篇

    一.本文的意义 因为谷歌官方其实已经写了MNIST入门和深入两篇教程了,那我写这些文章又是为什么呢,只是抄袭?那倒并不是,更准确的说应该是笔记吧,然后用更通俗的语言来解释,并且补充更多,官方文章中没有 ...

最新文章

  1. 在Mac上设置环境变量并永久生效的方法
  2. Errors running builder 'DeploymentBuilder' on project '工程名'
  3. DCMTK:测试CT像框FG类
  4. Python的3种执行方式
  5. xml.query() 实例演示
  6. 3.10 十进制转换为二进制
  7. 德鲁伊 oltp oltp_内存中OLTP –招待看门狗的三个关键点–检查点文件
  8. Proteus仿真:流水灯
  9. 微信定位服务器在哪个位置打开,微信开了定位功能附近的人都看不到我是怎么回事...
  10. html的div背景,html div背景到底是什么颜色呢?
  11. Premiere Pro 2022转字幕语言包
  12. chm sharp安卓版_CHM Sharp(CHM阅读器)
  13. nand flash地址机制
  14. ROS2与C++入门教程-在C++包里增加python支持
  15. Python男票管理系统
  16. win7怎么打开注册表
  17. idea报错:org.codehaus.plexus.component.repository.exception.ComponentLookupException
  18. 利用$ajax实现远程登录判断
  19. tiktok为什么注册不成_tiktok抖音怎样注册?完整流程介绍
  20. java am pm_java-在日期格式化后以小写形式显示AM和PM

热门文章

  1. silverlight项目工作小结
  2. ASP.NET URL重写浅析
  3. oracle锁和kill session
  4. 【直观理解】粒子滤波 原理及实现
  5. size_t 和int 无符号整型和有符号整型
  6. lnk2019 mysql_C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误的解决方法
  7. linux下两个线程交替打印,两个线程交替打印AB
  8. java 数据挖掘 开源_5个开源数据挖掘工具,收下这波干货
  9. odbc数据库access丢失_有关使用access数据库,odbc中碰到的一些问题。
  10. python随机生成中文句子_python – 如何使用NLTK从诱导语法中生成句子?