python实现手写数字识别(小白入门)

锌丝python实现⼿写数字识别(⼩⽩⼊门)
⼿写数字识别(⼩⽩⼊门)
今早刚刚上了节实验课,关于逻辑回归,所以⼿有点刺挠就想发个博客,作为刚刚⼊门的⼩⽩,看到代码运⾏成功就有点⼩激动,这个实验没啥含⾦量,所以路过的⼤⽜不要停留,我怕你们吐槽哈哈。
实验结果:
1.数据预处理
其实呢,原理很简单,就是使⽤多变量逻辑回归,将训练28*28图⽚的灰度值转换成⼀维矩阵,这就变成了求784个特征向量1个标签的逻辑回归问题。代码如下:
#数据预处理
trainData = np.loadtxt(open('digits_training.csv','r'), delimiter=",",skiprows=1)#装载数据
MTrain, NTrain = np.shape(trainData)#⾏列数
print("训练集:",MTrain,NTrain)
xTrain = trainData[:,1:NTrain]
xTrain_col_avg = np.mean(xTrain, axis=0)#对各列求均值
xTrain =(xTrain- xTrain_col_avg)/255#归⼀化
yTrain = trainData[:,0]
2.训练模型
www.77zizi对于数学差的⼀批的我来说,学习算法真的是太太太扎⼼了,好在具体算法封装在了sklearn库中。简单两⾏代码即可完成。具体参数的含义随随便便⼀搜到处都是,我就不班门弄斧了,每次看见算法除了头晕啥感觉没有。
model = LogisticRegression(solver='lbfgs', multi_class='multinomial', max_iter=500)
model.fit(xTrain, yTrain)
3.测试模型,保存
接下来测试⼀下模型,准确率能达到百分之90,也不算太⾼,训练数据集本来也不是很多。
为了⽅便,所以把模型保存下来,不⾄于运⾏⼀次就得训练⼀次。
#测试模型
testData = np.loadtxt(open('digits_testing.csv','r'), delimiter=",",skiprows=1)
MTest,NTest = np.shape(testData)
print("测试集:",MTest,NTest)
xTest = testData[:,1:NTest]
xTest =(xTest-xTrain_col_avg)/255# 使⽤训练数据的列均值进⾏处理
yTest = testData[:,0]
yPredict = model.predict(xTest)
errors = np.count_nonzero(yTest - yPredict)#返回⾮零项个数
print("预测完毕。错误:", errors,"条")
print("测试数据正确率:",(MTest - errors)/ MTest)
'''================================='''
#保存模型
# 创建⽂件⽬录
dirs ='testModel'
if not ists(dirs):
os.makedirs(dirs)
joblib.dump(model, dirs+'/model.pkl')
吸油茶print("模型已保存")
4.调⽤模型
既然模型训练好了,就来放⼏张图⽚调⽤模型试⼀下看看怎么样
导⼊要测试的图⽚,然后更改⼤⼩为28*28,将图⽚⼆值化减⼩误差。
为了让结果看起来有逼格,所以最后把图⽚和识别数字同实显⽰出来。
import  cv2
import numpy as np
als import joblib
map=cv2.imread(r"C:\Users\lenovo\Desktop\[DX6@[C$%@2RS0R2KPE[W@V.png") GrayImage = cv2.cvtColor(map, cv2.COLOR_BGR2GRAY)
ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV)
size(thresh2,(28,28))
img_array = np.asarray(Image)
z=shape(1,-1)
'''================================================'''
model = joblib.load('testModel'+'/model.pkl')
yPredict = model.predict(z)
print(yPredict)
y=str(yPredict)
cv2.putText(map,y,(10,20), cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2, cv2.LINE_AA) cv2.imshow("map",map)
cv2.waitKey(0)
5.完整代码
test1.py
import numpy as np
from sklearn.linear_model import LogisticRegression
import os
als import joblib
#数据预处理冯代存
trainData = np.loadtxt(open('digits_training.csv','r'), delimiter=",",skiprows=1)#装载数据MTrain, NTrain = np.shape(trainData)#⾏列数
print("训练集:",MTrain,NTrain)
xTrain = trainData[:,1:NTrain]
xTrain_col_avg = np.mean(xTrain, axis=0)#对各列求均值
xTrain =(xTrain- xTrain_col_avg)/255#归⼀化
yTrain = trainData[:,0]
'''================================='''
#训练模型
model = LogisticRegression(solver='lbfgs', multi_class='multinomial', max_iter=500) model.fit(xTrain, yTrain)
print("训练完毕")
'''================================='''
#测试模型
testData = np.loadtxt(open('digits_testing.csv','r'), delimiter=",",skiprows=1)
MTest,NTest = np.shape(testData)
print("测试集:",MTest,NTest)
xTest = testData[:,1:NTest]
xTest =(xTest-xTrain_col_avg)/255# 使⽤训练数据的列均值进⾏处理
yTest = testData[:,0]
yPredict = model.predict(xTest)
errors = np.count_nonzero(yTest - yPredict)#返回⾮零项个数
print("预测完毕。错误:", errors,"条")
print("测试数据正确率:",(MTest - errors)/ MTest)
'''================================='''
#保存模型
# 创建⽂件⽬录
dirs ='testModel'
if not ists(dirs):
os.makedirs(dirs)
joblib.dump(model, dirs+'/model.pkl')
print("模型已保存")
运⾏结果
test2.py
import  cv2
import numpy as np双面针织机
als import joblib
map=cv2.imread(r"C:\Users\lenovo\Desktop\[DX6@[C$%@2RS0R2KPE[W@V.png")消声室制作
GrayImage = cv2.cvtColor(map, cv2.COLOR_BGR2GRAY)
ret,thresh2=cv2.threshold(GrayImage,127,255,cv2.THRESH_BINARY_INV)
size(thresh2,(28,28))
img_array = np.asarray(Image)
z=shape(1,-1)
'''================================================'''
model = joblib.load('testModel'+'/model.pkl')
yPredict = model.predict(z)
print(yPredict)
y=str(yPredict)
cv2.putText(map,y,(10,20), cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2, cv2.LINE_AA)
cv2.imshow("map",map)
cv2.waitKey(0)
提供⼏张样本⽤来测试:
实验中还有很多地⽅需要优化,⽐如数据集太少,泛化能⼒太差,⽤样本的数据测试正确率挺⾼,但是⽤我⾃⼰⼿写的字正确率就太低了,可能我字写的太丑,哎,还是⾃⼰太菜了,以后得多学学算法了。

本文发布于:2024-09-23 05:15:01,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/216560.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:模型   算法   数据   训练   回归   逻辑
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议