数据集介绍:
Keras里已经封装好了mnist数据集(包含6000张训练数据,1000张测试数据),图片大小为28x28。一行代码就可以从keras里导入进来,第一次导入时间长点,请慢慢等待。
from keras.datasets import mnist

导入各种包

from keras.layers import Dense, Dropout, Convolution2D
from keras.layers import MaxPooling2D
from keras import Sequential
from keras.datasets import mnist
from keras.optimizers import Adam
from keras.utils import np_utils
from keras.layers import Flatten
import matplotlib.pyplot as plt

数据归一化

(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
X_train = X_train.reshape(-1, 28, 28, 1)/255.0
X_test = X_test.reshape(-1, 28, 28, 1)/255.0Y_train = np_utils.to_categorical(Y_train, num_classes=10)
Y_test = np_utils.to_categorical(Y_test, num_classes=10)

使用keras搭建网络模型
手写字属于10分类,最后一层全连接层和分类数相匹配,两层全连接层中间加Dropout层,按比例丢弃神经元,抑制过拟合。

model = Sequential()
model.add(Convolution2D(12, kernel_size=5, activation='relu', strides=1,padding='same', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=2, strides=2, padding='same'))model.add(Convolution2D(64, 5, activation='relu', strides=1,padding='same'))
model.add(MaxPooling2D(pool_size=2, strides=2, padding='same'))model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))

编译训练模型
可以自定义优化器的学习率,我选用是是Adam优化器,它相对于其他优化器可以实现快速找到全局最小。损失函数选择的是交叉熵损失。

adam = Adam(lr=1e-4)
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
history = model.fit(X_train, Y_train, epochs=10, batch_size=32, verbose=2, validation_data=(X_test, Y_test))

使用matplotlib绘制训练的准确率和损失

acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))plt.plot(epochs, acc, 'b', label='Training accuracy')
plt.plot(epochs, val_acc, 'r', label='validation accuracy')
plt.title('Training and validation accuracy')
plt.legend(loc='lower right')
plt.figure()plt.plot(epochs, loss, 'b', label='Training loss')
plt.plot(epochs, val_loss, 'r', label='validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()

结果
由于时间问题,我只训练了10个epochs,验证准确率已到99.3%


完整代码

from keras.layers import Dense, Dropout, Convolution2D
from keras.layers import MaxPooling2D
from keras import Sequential
from keras.datasets import mnist
from keras.optimizers import Adam
from keras.utils import np_utils
from keras.layers import Flatten
import matplotlib.pyplot as plt(X_train, Y_train), (X_test, Y_test) = mnist.load_data()
X_train = X_train.reshape(-1, 28, 28, 1)/255.0
X_test = X_test.reshape(-1, 28, 28, 1)/255.0Y_train = np_utils.to_categorical(Y_train, num_classes=10)
Y_test = np_utils.to_categorical(Y_test, num_classes=10)model = Sequential()
model.add(Convolution2D(12, kernel_size=5, activation='relu', strides=1,padding='same', input_shape=(28, 28, 1)))
model.add(MaxPooling2D(pool_size=2, strides=2, padding='same'))model.add(Convolution2D(64, 5, activation='relu', strides=1,padding='same'))
model.add(MaxPooling2D(pool_size=2, strides=2, padding='same'))model.add(Flatten())
model.add(Dense(1024, activation='relu'))
model.add(Dropout(0.5))
model.add(Dense(10, activation='softmax'))adam = Adam(lr=1e-4)
model.compile(optimizer='adam',loss='categorical_crossentropy',metrics=['accuracy'])
history = model.fit(X_train, Y_train, epochs=10, batch_size=32, verbose=2, validation_data=(X_test, Y_test))
# loss, accuracy = score = model.evaluate(X_test, Y_test)
# print('test loss', loss)
# print('test accuracy', accuracy)
acc = history.history['accuracy']
val_acc = history.history['val_accuracy']
loss = history.history['loss']
val_loss = history.history['val_loss']
epochs = range(len(acc))plt.plot(epochs, acc, 'b', label='Training accuracy')
plt.plot(epochs, val_acc, 'r', label='validation accuracy')
plt.title('Training and validation accuracy')
plt.legend(loc='lower right')
plt.figure()plt.plot(epochs, loss, 'b', label='Training loss')
plt.plot(epochs, val_loss, 'r', label='validation loss')
plt.title('Training and validation loss')
plt.legend()
plt.show()

手写字识别——可视化训练过程相关推荐

  1. 百度PaddlePaddle使用飞桨搭载手写字识别并训练、预测

    文章目录 通过极简方案构建手写数字识别模型 一.导入库 二.数据处理 三.网络模型设计 四.训练配置以及模型训练 **==这里特殊之处在于读取数据的方式采取飞桨自带数据读取器==** 五.模型测试 = ...

  2. 基于tensorflow的MNIST手写字识别

    一.卷积神经网络模型知识要点卷积卷积 1.卷积 2.池化 3.全连接 4.梯度下降法 5.softmax 本次就是用最简单的方法给大家讲解这些概念,因为具体的各种论文网上都有,连推导都有,所以本文主要 ...

  3. 利用卷积神经网络实现手写字识别

    本文我们介绍一下卷积神经网络,然后基于pytorch实现一个卷积神经网络,并实现手写字识别 卷积神经网络介绍 传统神经网络处理图片问题的不足 让我们先复习一下神经网络的工作流程: 搭建一个神经网络 将 ...

  4. python手写汉字识别_TensorFlow 2.0实践之中文手写字识别

    问题导读: 1.相比于简单minist识别,汉字识别具有哪些难点? 2.如何快速的构建一个OCR网络模型? 3.读取的时候有哪些点需要注意? 4.如何让模型更简单的收敛? 还在玩minist?fash ...

  5. .net 数字转汉字_TensorFlow 2.0 中文手写字识别(汉字OCR)

    TensorFlow 2.0 中文手写字识别(汉字OCR) 在开始之前,必须要说明的是,本教程完全基于TensorFlow2.0 接口编写,请误与其他古老的教程混为一谈,本教程除了手把手教大家完成这个 ...

  6. Pytorch入门练习2-kaggle手写字识别神经网络(CNN)实现

    目录 数据预处理 自定义数据集 构建网络结构 对卷积神经网络进行训练和评估 对数据进行预测 保存预测数据,提交代码 SNN由于无法考虑到图片数据的维度关系,在预测精度上会被限制,本章我们采用CNN卷积 ...

  7. TensorFlow基于minist数据集实现手写字识别实战的三个模型

    手写字识别 model1:输入层→全连接→输出层softmax model2:输入层→全连接→隐含层→全连接→输出层softmax model3:输入层→卷积层1→卷积层2→全连接→dropout层→ ...

  8. 在Windows上调试TensorFlow 2.0 中文手写字识别(汉字OCR)

    在Windows上调试TensorFlow 2.0 中文手写字识别(汉字OCR) 一.环境的搭建 Windows+1080Ti+Cuda10.1 Tsorflow2.0.0 Numpy1.16.4 注 ...

  9. 利用神经网络实现手写字识别

    神经网络介绍 神经网络即多层感知机 如果不知道感知机的可以看博主之前的文章感知机及Python实现 神经网络实现及手写字识别 关于数据集: 从http://yann.lecun.com/exdb/mn ...

最新文章

  1. 16分钟优化mRNA疫苗稳定性! 百度AI算法LinearDesign问世
  2. Android中对Handler用法的总结
  3. windows服务器性能分析方法小结,Windows服务器性能分析方法小结
  4. 终于买了个Dell d400二手笔记本
  5. Active Noise Cancelling-主动噪声消除
  6. 算法与数据结构(python):快速排序
  7. 五分钟搞懂后缀数组!
  8. 嵌入式Linux驱动学习之路(十五)按键驱动-定时器防抖
  9. EasyUI+JSP之java读取数据库后JSON格式数据的返回及调用
  10. 页面中php传值后循环列表js获取点击的id
  11. FPGA学习笔记---3种乘法器的比较
  12. matlab 遗传算法 等式约束,关于MATLAB遗传算法工具箱不等式约束
  13. Flutter之RenderView RenderObject ParentData知识点梳理
  14. PHP将swf转为gif,swf怎么转换成gif 怎么把swf转换成gif
  15. android 刷机 3e,华为nova 3e官方出厂固件rom刷机包下载_nova3e完整版升级包
  16. Java中String字符串长度
  17. apache 服务器状态查看
  18. Dubbo之Adaptive注解用法
  19. ChucK初步(4)
  20. 计算机音乐奇迹再现乐谱,天谕手游奇迹再现乐谱代码分享

热门文章

  1. 2020年第一碗鸡汤
  2. 还在手写代码?用了这个工具,不用一行代码也能做出网站
  3. 支付宝APP扫一扫领现金
  4. Unity - Rigging, Skinning 的意思 - 装配,蒙皮
  5. 常见转型产品经理的4种岗位
  6. python命名规则数字开头的成语_python小白之路(基础知识一)
  7. 如何应用计算机编辑图片素材,如何制作朋友圈小视频
  8. GitHub更改username,注销账号的方法
  9. php毛玻璃,使用css怎么实现毛玻璃效果?
  10. 华为HCIP-RS 数通笔记