深度学习入门实例——基于keras的mnist手写数字识别
本文介绍了利用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手写数字识别相关推荐
- 深度学习案例之基于 CNN 的 MNIST 手写数字识别
一.模型结构 本文只涉及利用Tensorflow实现CNN的手写数字识别,CNN的内容请参考:卷积神经网络(CNN) MNIST数据集的格式与数据预处理代码input_data.py的讲解请参考 :T ...
- 1、基于Keras、Mnist手写数字识别数据集构建全连接(FC)神经网络训练模型
文章目录 前言 一.MNIST数据集是什么? 二.构建神经网络训练模型 1.导入库 2.载入数据 3.数据处理 4.创建模型 5.编译模型 6.训练模型 7.评估模型 三.总代码 前言 提示: 1.本 ...
- 深度学习入门项目:PyTorch实现MINST手写数字识别
完整代码下载[github地址]:https://github.com/lmn-ning/MNIST_PyTorch.git 目录 一.MNIST数据集介绍及下载地址 二.代码结构 三.代码 data ...
- TensorFlow高阶 API: keras教程-使用tf.keras搭建mnist手写数字识别网络
TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字识别网络 目录 TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字 ...
- 基于K210的MNIST手写数字识别
基于K210的MNIST手写数字识别 项目已开源链接: Github. 硬件平台 采用Maixduino开发板 在sipeed官方有售 软件平台 使用MaixPy环境进行单片机的编程 官方资源可在这里 ...
- 使用tf.keras搭建mnist手写数字识别网络
使用tf.keras搭建mnist手写数字识别网络 目录 使用tf.keras搭建mnist手写数字识别网络 1.使用tf.keras.Sequential搭建序列模型 1.1 tf.keras.Se ...
- 深度学习笔记:01快速构建一个手写数字识别系统以及张量的概念
深度学习笔记:01快速构建一个手写数字识别系统 神经网络代码最好运行在GPU中,但是对于初学者来说运行在GPU上成本太高了,所以先运行在CPU中,就是慢一些. 一.安装keras框架 使用管理员模式打 ...
- tensorflow saver_机器学习入门(6):Tensorflow项目Mnist手写数字识别-分析详解
本文主要内容:Ubuntu下基于Tensorflow的Mnist手写数字识别的实现 训练数据和测试数据资料:http://yann.lecun.com/exdb/mnist/ 前面环境都搭建好了,直接 ...
- mnist手写数字识别python_基于tensorflow的MNIST手写数字识别(二)--入门篇
一.本文的意义 因为谷歌官方其实已经写了MNIST入门和深入两篇教程了,那我写这些文章又是为什么呢,只是抄袭?那倒并不是,更准确的说应该是笔记吧,然后用更通俗的语言来解释,并且补充更多,官方文章中没有 ...
最新文章
- 在Mac上设置环境变量并永久生效的方法
- Errors running builder 'DeploymentBuilder' on project '工程名'
- DCMTK:测试CT像框FG类
- Python的3种执行方式
- xml.query() 实例演示
- 3.10 十进制转换为二进制
- 德鲁伊 oltp oltp_内存中OLTP –招待看门狗的三个关键点–检查点文件
- Proteus仿真:流水灯
- 微信定位服务器在哪个位置打开,微信开了定位功能附近的人都看不到我是怎么回事...
- html的div背景,html div背景到底是什么颜色呢?
- Premiere Pro 2022转字幕语言包
- chm sharp安卓版_CHM Sharp(CHM阅读器)
- nand flash地址机制
- ROS2与C++入门教程-在C++包里增加python支持
- Python男票管理系统
- win7怎么打开注册表
- idea报错:org.codehaus.plexus.component.repository.exception.ComponentLookupException
- 利用$ajax实现远程登录判断
- tiktok为什么注册不成_tiktok抖音怎样注册?完整流程介绍
- java am pm_java-在日期格式化后以小写形式显示AM和PM
热门文章
- silverlight项目工作小结
- ASP.NET URL重写浅析
- oracle锁和kill session
- 【直观理解】粒子滤波 原理及实现
- size_t 和int 无符号整型和有符号整型
- lnk2019 mysql_C++使用MySQL-Connector/C++连接MySQL出现LNK2019错误的解决方法
- linux下两个线程交替打印,两个线程交替打印AB
- java 数据挖掘 开源_5个开源数据挖掘工具,收下这波干货
- odbc数据库access丢失_有关使用access数据库,odbc中碰到的一些问题。
- python随机生成中文句子_python – 如何使用NLTK从诱导语法中生成句子?