(Windows,ten2.0)python0-9数字识别系统搭建(MNIST数据集)

一、MNIST数据集介绍:是由0〜9手写数字图片和数字标签所组成的,由60000个训练样本和10000个测试组成。
二、tf2.0.0导入MNIST数据集的方法:
from tensorflow.examples.tutorials.mnist import input_data
我的电脑是tf2.6.0,导入MNIST数据集的方法:
from tensorflow.keras.datasets import mnist
三、代码模块:
代码引用自:https://blog.csdn.net/JulyLi2019/article/details/106248212/
上代码:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 加载mnist数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# print(x_train.shape)
# plt.imshow(x_train[0])
x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化
y_train_onehot = tf.keras.utils.to_categorical(y_train)  # 将标签转换成独热编码
y_test_onehot = tf.keras.utils.to_categorical(y_test)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))  # 28*28
model.add(tf.keras.layers.Dense(128, activation='relu'))   # 中间隐藏层激活函数用relu
model.add(tf.keras.layers.Dense(10, activation='softmax'))  # 多分类输出一般用softmax分类器

#loss函数使用交叉熵
# 顺序编码用sparse_categorical_crossentropy
# 独热编码用categorical_crossentropy
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['acc'])

history = model.fit(x_train, y_train_onehot, epochs=5)

model.evaluate(x_test, y_test_onehot)

# predict=model.predict(y_test)
#
# predict.shape

运行结果:在这里插入图片描述
当然这里我们可以通过模型保存与载入把训练与测试分开:
训练:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 加载mnist数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# print(x_train.shape)
# plt.imshow(x_train[0])
x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化
y_train_onehot = tf.keras.utils.to_categorical(y_train)  # 将标签转换成独热编码
y_test_onehot = tf.keras.utils.to_categorical(y_test)

model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))  # 28*28
model.add(tf.keras.layers.Dense(128, activation='relu'))   # 中间隐藏层激活函数用relu
model.add(tf.keras.layers.Dense(10, activation='softmax'))  # 多分类输出一般用softmax分类器

#loss函数使用交叉熵
# 顺序编码用sparse_categorical_crossentropy
# 独热编码用categorical_crossentropy
model.compile(optimizer='adam',
              loss='categorical_crossentropy',
              metrics=['acc'])

history = model.fit(x_train, y_train_onehot, epochs=5)

model.save('model.h5')
print('saved total model.')

# plt.plot(history.epoch,history.history.get('accuracy'),label='accuracy')
# plt.legend()
# plt.show()

测试:

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd

# 加载mnist数据集
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()
# print(x_train.shape)
# plt.imshow(x_train[0])
x_train, x_test = x_train / 255.0, x_test / 255.0  # 归一化
y_train_onehot = tf.keras.utils.to_categorical(y_train)  # 将标签转换成独热编码
y_test_onehot = tf.keras.utils.to_categorical(y_test)

network = tf.keras.models.load_model('model.h5')
network.evaluate(x_test, y_test_onehot)

之后就可以用训练好的模型对手写汉字图片进行预测了!在这里插入图片描述
四、对手写汉字进行预测୧(๑•̀◡•́๑)૭
首先先在电脑某处保存一张手写0-9数字
代码:

import tensorflow as tf
import numpy as np
from PIL import Image
import matplotlib.pyplot as plt
import pandas as pd

new_model = tf.keras.models.load_model('model.h5')

# 调用模型进行预测识别
im = Image.open(r'C:\Users\12393\Desktop\8.png')  # 读取图片路径
im = im.resize((28, 28))  # 调整大小和模型输入大小一致
im = np.array(im)

# 对图片进行灰度化处理
p3 = im.min(axis=-1)
# plt.imshow(p3, cmap='gray')

# 将白底黑字变成黑底白字   由于训练模型是这种格式
for i in range(28):
    for j in range(28):
        p3[i][j] = 255-p3[i][j]

# 模型输出结果是每个类别的概率,取最大的概率的类别就是预测的结果
ret = new_model.predict((p3 / 255).reshape((1, 28, 28)))
print(ret)
number = np.argmax(ret)
print(number)

我的图片路径为C:\Users\12393\Desktop\8.png。
图片:在这里插入图片描述
运行结果:在这里插入图片描述
注:本人不是计算机视觉处理方向的学生,对计算机视觉处理也是小白一枚,欢迎留言沟通━(`∀´)ノ亻!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值