pytorch 数字识别,pytorch mnist手写数字识别
本文主要介绍了手写数字识别的python实现,非常适合小白的初级学习。本文通过实例和图片相结合的方式非常详细地为您介绍,对您的学习或工作有一定的参考价值。有需要的朋友可以参考一下。
00-1010手写数字识别(小白简介)1。数据预处理2。培训模式3。测试模型,节省4。呼叫模型5。完全码
目录
今天早上刚上了一节关于逻辑回归的实验课,感觉有点痒,想写个博客。作为一个初学者,看到代码成功运行,我有点激动。这个实验没有含金量,不要被大牛阻止。我怕你吐槽哈哈。
实验结果:
手写数字识别(小白入门)
其实原理很简单,就是用多元logistic回归把训练28*28图片的灰度值转换成一维矩阵,变成了寻找784个特征向量和一个标签的logistic回归问题。代码如下:
#数据预处理
train data=NP . load txt(open( digits _ training . CSV , r ),delimiter=,,skiprows=1) #加载数据
Mtrain,ntrain=np.shape (traindata) #行数和列数
打印(训练集:,MTrain,NTrain)
xTrain=trainData[:1:火车]
Xtrain _ col _ avg=np.mean (xtrain,axis=0) #对列进行平均。
xtrain=(xtrain-xtrain _ col _ avg)/255 #归一化
yTrain=trainData[:0]
1.数据预处理
对于我这些数学差的人来说,我老婆真的很担心学算法。好在具体算法打包在sklearn库中。可以完成两行简单的代码。参数的具体含义是随便到处搜的,不玩花样了。每次看到算法,除了头晕,什么感觉都没有。
model=logistic regression(solver= lbfgs ,multi_class=multinomial ,max_iter=500)
model.fit(xTrain,yTrain)
2.训练模型
接下来测试模型,准确率能达到90%,不算太高,训练数据集也不多。
为了方便起见,保存了模型,这样运行后就不用再训练一次了。
#测试模型
testData=NP . load txt(open( digits _ testing . CSV , r ),分隔符=,,skiprows=1)
MTest,NTest=np.shape(testData)
打印(测试集:,MTest,NTest)
xTest=testData[:1: test]
xtest=(xtest-xtrain _ col _ avg)/255 #使用训练数据的列均值进行处理。
yTest=testData[:0]
yPredict=model.predict(xTest)
Errors=np.count _非零(ytest-ypredict) #返回非零项的个数
打印(预测完成。错误:“”,错误,“文章”)
打印(测试数据准确率为: ,(MTest-errors)/MTest)
=================================
#保存模型
#创建文件目录
dirs=测试模型
如果不是os.path.exists(dirs):
os.makedirs(目录)
joblib.dump(model,dirs /model.pkl )
打印(“模型已保存”)
https://download.csdn.net/download/qq_45874897/12427896需要的可以自己下载。
3.测试模型,保存
因为
模型训练好了,就来放几张图片调用模型试一下看看怎么样
导入要测试的图片,然后更改大小为28*28,将图片二值化减小误差。
为了让结果看起来有逼格,所以最后把图片和识别数字同实显示出来。
import cv2import numpy as np
from sklearn.externals 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)
Image=cv2.resize(thresh2,(28,28))
img_array = np.asarray(Image)
z=img_array.reshape(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 npfrom sklearn.linear_model import LogisticRegression
import os
from sklearn.externals 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 os.path.exists(dirs):
os.makedirs(dirs)
joblib.dump(model, dirs+/model.pkl)
print("模型已保存")
运行结果
test2.py
import cv2import numpy as np
from sklearn.externals 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)
Image=cv2.resize(thresh2,(28,28))
img_array = np.asarray(Image)
z=img_array.reshape(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)
提供几张样本用来测试:
实验中还有很多地方需要优化,比如数据集太少,泛化能力太差,用样本的数据测试正确率挺高,但是用我自己手写的字正确率就太低了,可能我字写的太丑,哎,还是自己太菜了,以后得多学学算法了。
到此这篇关于PyTorch实现手写数字的识别入门小白教程的文章就介绍到这了,更多相关PyTorch手写数字识别内容请搜索盛行IT软件开发工作室以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT软件开发工作室!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。