keras实现手写数字识别
TensorFlow和Kears的安装
Keras是基于TensorFlow和Theano(由加拿大蒙特利尔大学开发的机器学习框架)的深度学习库,是由纯python编写而成的高层神经网络API,也仅支持python开发。它是为了支持快速实践而对tensorflow或者Theano的再次封装,让我们可以不用关注过多的底层细节,能够把想法快速转换为结果。它也很灵活,且比较容易学。
在新版得TensorFlow中已经包含了Keras,所以我们只用安装TresorFlow即可。
TensorFlow安装:
#在终端或powershell中输入
pip install tensorflow #默认安装CPU和GPU版本
如果不是英伟达的GPU,由于不支持CUDA,安装GPU版本在调用时会报如下错误:
Could not load dynamic library 'libcudart.so.10.1'; dlerror: libcudart.so.10.1: cannot open shared object file: No such file or directory
2020-09-20 21:31:45.455738: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
所以这时我们只安装CPU版本即可
pip install tensorflow-cpu#只安装CPU版本
使用Keras实现神经网络
导包
from tensorflow.python.keras.utils.np_utils import to_categorical
from keras import models, layers, regularizers
from tensorflow.keras.optimizers import RMSprop
from keras.datasets import mnist#导入数据集
import matplotlib.pyplot as plt
数据导入
(train_imgs,train_labels),(test_images,test_labels)=mnist.load_data()#加载数据集
print(train_imgs.shape,test_images.shape)#打印训练集样本数据特征
# print(train_imgs[0])#28*28
# print(train_labels[0])
plt.imshow(train_imgs[0])#打印图片 28*28像素图片
plt.show()
train_labels[:2]
(60000, 28, 28) (10000, 28, 28)
array([5, 0], dtype=uint8)
数据处理
train_imgs=train_imgs.reshape((60000,28*28)).astype('float')#将60000*28*28 拍成一维向量 即(60000,28*28)
test_images=test_images.reshape((10000,28*28)).astype('float')
print(train_imgs.shape)
test_images.shape
(60000, 784)(10000, 784)
print(train_labels[:2])#对标签进行处理
train_labels=to_categorical(train_labels)#onehot编码
test_labels=to_categorical(test_labels)
print(train_labels.shape)
train_labels[:2]
[5 0]
(60000, 10)array([[0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],[1., 0., 0., 0., 0., 0., 0., 0., 0., 0.]], dtype=float32)
建立模型
network=models.Sequential()#模型
#隐藏层
#Dense是全连接得
#activation激活函数
#input_shape是输入层大小
network.add(layers.Dense(units=15,activation='sigmoid',input_shape=(28*28,),))
#使用add来堆叠模型
network.add(layers.Dense(units=10,activation='sigmoid'))
2022-02-10 22:37:39.194764: I tensorflow/core/platform/cpu_feature_guard.cc:151] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 AVX512F FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
编译训练模型
#编译步骤
network.compile(optimizer=RMSprop(lr=0.001),loss='categorical_crossentropy',metrics=['accuracy'])
#训练网络
#epochs表示训练多少个回合,batch——size表示每次训练给多大得数据
network.fit(train_imgs,train_labels,epochs=20,batch_size=128,verbose=2)
#训练了大约100轮,在训练集上得正确率达到了0.9187
Epoch 1/20
469/469 - 2s - loss: 0.2825 - accuracy: 0.9192 - 2s/epoch - 5ms/step
Epoch 2/20
469/469 - 1s - loss: 0.2843 - accuracy: 0.9190 - 1s/epoch - 3ms/step
Epoch 3/20
469/469 - 1s - loss: 0.2847 - accuracy: 0.9186 - 1s/epoch - 3ms/step
Epoch 4/20
469/469 - 1s - loss: 0.2842 - accuracy: 0.9184 - 1s/epoch - 3ms/step
Epoch 5/20
469/469 - 1s - loss: 0.2818 - accuracy: 0.9176 - 1s/epoch - 3ms/step
Epoch 6/20
469/469 - 1s - loss: 0.2800 - accuracy: 0.9183 - 1s/epoch - 3ms/step
Epoch 7/20
469/469 - 1s - loss: 0.2809 - accuracy: 0.9196 - 1s/epoch - 3ms/step
Epoch 8/20
469/469 - 1s - loss: 0.2789 - accuracy: 0.9197 - 1s/epoch - 3ms/step
Epoch 9/20
469/469 - 1s - loss: 0.2767 - accuracy: 0.9198 - 1s/epoch - 3ms/step
Epoch 10/20
469/469 - 1s - loss: 0.2780 - accuracy: 0.9194 - 1s/epoch - 3ms/step
Epoch 11/20
469/469 - 1s - loss: 0.2776 - accuracy: 0.9193 - 1s/epoch - 3ms/step
Epoch 12/20
469/469 - 1s - loss: 0.2786 - accuracy: 0.9185 - 1s/epoch - 3ms/step
Epoch 13/20
469/469 - 1s - loss: 0.2789 - accuracy: 0.9179 - 1s/epoch - 3ms/step
Epoch 14/20
469/469 - 1s - loss: 0.2786 - accuracy: 0.9185 - 1s/epoch - 3ms/step
Epoch 15/20
469/469 - 1s - loss: 0.2794 - accuracy: 0.9198 - 1s/epoch - 3ms/step
Epoch 16/20
469/469 - 2s - loss: 0.2799 - accuracy: 0.9186 - 2s/epoch - 3ms/step
Epoch 17/20
469/469 - 1s - loss: 0.2793 - accuracy: 0.9185 - 1s/epoch - 3ms/step
Epoch 18/20
469/469 - 1s - loss: 0.2812 - accuracy: 0.9187 - 1s/epoch - 3ms/step
Epoch 19/20
469/469 - 1s - loss: 0.2824 - accuracy: 0.9185 - 1s/epoch - 3ms/step
Epoch 20/20
469/469 - 1s - loss: 0.2796 - accuracy: 0.9187 - 1s/epoch - 3ms/step<keras.callbacks.History at 0x7f1add8ffc40>
#神将网络总统结构
print(network.summary())
#11775=28*28*15+15
# 160=15*10+10
预测与评估
#在测试集上测试一下模型性能
y_pre=network.predict(test_images[:5])
print(y_pre,test_labels[:5])#评估模型
test_loss,test_accuracy=network.evaluate(test_images,test_labels)
print('test_loss:',test_loss,' test_accuracy:',test_accuracy)
[[3.7899613e-04 7.9274920e-05 6.9625974e-03 3.8788289e-02 5.3796172e-042.1356046e-03 2.5246632e-07 9.4646072e-01 1.8450618e-04 2.1742195e-02][4.7492981e-04 2.2884309e-03 1.4204246e-01 1.8988550e-03 5.1716688e-074.8227012e-03 6.3610077e-04 9.9899953e-06 3.8048625e-03 3.6833579e-05][5.9188955e-07 9.7502083e-01 1.5270770e-02 4.0745676e-02 4.2839492e-051.5333742e-02 2.3275614e-04 2.7633309e-02 1.5907192e-01 1.4984608e-03][9.5915210e-01 1.6660117e-05 5.6179762e-03 9.1245770e-04 9.8120026e-063.5943031e-02 1.2471378e-03 7.6335669e-04 4.9379766e-03 2.2325516e-03][6.8008900e-04 6.2575936e-04 9.1023445e-02 8.5565448e-03 9.9243879e-011.0120630e-02 3.1238824e-02 5.0986111e-02 9.3790025e-02 4.2072201e-01]] [[0. 0. 0. 0. 0. 0. 0. 1. 0. 0.][0. 0. 1. 0. 0. 0. 0. 0. 0. 0.][0. 1. 0. 0. 0. 0. 0. 0. 0. 0.][1. 0. 0. 0. 0. 0. 0. 0. 0. 0.][0. 0. 0. 0. 1. 0. 0. 0. 0. 0.]]
313/313 [==============================] - 1s 2ms/step - loss: 0.2939 - accuracy: 0.9143
test_loss: 0.2938748896121979 test_accuracy: 0.9143000245094299
添加正则化
network.add(layers.Dense(units=128,activation='relu',input_shape=(28*28,),kernel_regularizer=regularizers.l2(0.1)))
network.add(layers.Dense(units=30,activation='relu',kernel_regularizer=regularizers.L2(0.1)))
network.add(layers.Dense(units=10,activation='softmax'))
最终正确率可以达到0.99
keras实现手写数字识别相关推荐
- 基于Keras:手写数字识别
一.概述 手写数字识别通常作为第一个深度学习在计算机视觉方面应用的示例,Mnist数据集在这当中也被广泛采用,可用于进行训练及模型性能测试: 模型的输入: 32*32的手写字体图片,这些手写字体包含0 ...
- Python+Keras实现手写数字识别
机器学习入门级别项目,话不多说,我看的教程在这里,代码来源也是这里,快附上B站教程:https://www.bilibili.com/video/BV16g4y1z7Qu?from=search&am ...
- matlab朴素贝叶斯手写数字识别_从“手写数字识别”学习分类任务
机器学习问题可以分为回归问题和分类问题,回归问题已经在线性回归讲过,本文学习分类问题.分类问题跟回归问题有明显的区别,回归问题是连续的数值,而分类问题是离散的类别,比如将性别分为[男,女],将图片分为 ...
- 深度学习--TensorFlow(项目)Keras手写数字识别
目录 效果展示 基础理论 1.softmax激活函数 2.神经网络 3.隐藏层及神经元最佳数量 一.数据准备 1.载入数据集 2.数据处理 2-1.归一化 2-2.独热编码 二.神经网络拟合 1.搭建 ...
- keras从入门到放弃(十三)卷积神经网络处理手写数字识别
今天来一个cnn例子 手写数字识别,因为是图像数据 import keras from keras import layers import numpy as np import matplotlib ...
- keras从入门到放弃(十)手写数字识别训练
导入手写数字识别 import keras from keras import layers import matplotlib.pyplot as plt %matplotlib inline im ...
- 使用tf.keras搭建mnist手写数字识别网络
使用tf.keras搭建mnist手写数字识别网络 目录 使用tf.keras搭建mnist手写数字识别网络 1.使用tf.keras.Sequential搭建序列模型 1.1 tf.keras.Se ...
- TensorFlow高阶 API: keras教程-使用tf.keras搭建mnist手写数字识别网络
TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字识别网络 目录 TensorFlow高阶 API:keras教程-使用tf.keras搭建mnist手写数字 ...
- 深度学习入门实例——基于keras的mnist手写数字识别
本文介绍了利用keras做mnist数据集的手写数字识别. 参考网址 http://www.cnblogs.com/lc1217/p/7132364.html mnist数据集中的图片为28*28的单 ...
最新文章
- 网络编程4之UDP协议
- RGB ECT 4BIT 压缩后质量远高于RGB ETC2 4BIT
- Unity3d 游戏中集成Firebase 统计和Admob广告最新中文教程
- JSP页面传值出现中文乱码的问题
- 技术人写作和写代码一样重要
- 入行十年,总结出了数据仓库、数据集市、数据库的精华,你一定不能错过
- [BZOJ] 3301: [USACO2011 Feb] Cow Line
- Eclipse中@author的修改
- IOS Xcode7 http 和 https
- Tomcat安装及配置教程(超详细的图文教程)
- 西安大略大学计算机专业排名,加拿大大学计算机专业排名一览
- 【案例分享】网络环路检测基本功能配置
- Android 自定义锁屏_让你的 Android 用上炫酷航拍壁纸
- php 表示每月一号,适合每月一号发的说说
- 小组取什么名字好_寓意兴旺的公司名字取什么名字好
- intel linux核显性能,Intel UHD Graphics 630 核显性能解析
- 计算机视觉——SIFT特征提取与检索
- 有什么好用的便宜的云服务器?
- LogStash 7.x com.mysql.cj.jdbc.Driver not loaded的解决方法
- Obsidian Windows同步到iCloud 再到ipad 云盘 我的电脑导航栏无法应用的问题