手写数字识别

学习当然是从别人的经验开始。自己摸半天,啥都不会,还不如先拿别人的,看看是怎么回事。下面的代码来自别人,一步一步理解,拿来运用就可以了。
(1)新建代码文件夹
这个文件夹可一建在任何位置
(2)激活tensorflow环境
打开prompt

activate hei

(3)进入代码文件夹
cd D:\keras\yunyong



(4)包的处理
【1】后面会出错
如果没有进行这一步,就会出现下面的错误。

【2】卸载
pip uninstall h5py

【3】安装
pip install h5py==2.10.0 -i https://pypi.tuna.tsinghua.edu.cn/simple/

【4】安装pillow
因为要用自己的图片,所以还要安装pillow



(5)代码
①训练及保存
import keras
from keras.datasets import mnist
from keras.layers import Dense
from keras.models import Sequential
from keras.optimizers import SGD
(train_x, train_y) , (test_x, test_y) = mnist.load_data()
print(train_x.shape)
print(train_y.shape)
print(test_x.shape)
print(test_y.shape)
train_x = train_x.reshape(60000,784)
test_x = test_x.reshape(10000,784)
train_y = keras.utils.to_categorical(train_y,10)
test_y = keras.utils.to_categorical(test_y,10)
model = Sequential()
model.add(Dense(units=128,activation="relu",input_shape=(784,)))
model.add(Dense(units=128,activation="relu"))
model.add(Dense(units=128,activation="relu"))
model.add(Dense(units=10,activation="softmax"))
model.compile(optimizer=SGD(0.001),loss="categorical_crossentropy",metrics=["accuracy"])
#model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)
model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)
model.save("mini.h5")
accuracy = model.evaluate(x=test_x,y=test_y,batch_size=32)
print("Accuracy: ",accuracy[1])
文件保存为1_0.py,放在新建的文件夹里。
这个文件名可以取别的,但是存放位置一定要正确——cd XXXX文件夹里
②识别自带的图片
import keras
from keras.datasets import mnist
from keras.layers import Dense
from keras.models import Sequential
from keras.optimizers import SGD
(train_x, train_y) , (test_x, test_y) = mnist.load_data()
train_x = train_x.reshape(60000,784)
test_x = test_x.reshape(10000,784)
train_y = keras.utils.to_categorical(train_y,10)
test_y = keras.utils.to_categorical(test_y,10)
#
model = Sequential()
model.add(Dense(units=128,activation="relu",input_shape=(784,)))
model.add(Dense(units=128,activation="relu"))
model.add(Dense(units=128,activation="relu"))
model.add(Dense(units=10,activation="softmax"))
#
model.load_weights("mini.h5")
#model.fit(train_x,train_y,batch_size=32,epochs=10,verbose=1)
#model.save("mnistmodel.h5")
accuracy = model.evaluate(x=test_x,y=test_y,batch_size=32)
print("Accuracy: ",accuracy[1])
img = test_x[130]
test_img = img.reshape((1,784))
img_class = model.predict_classes(test_img)
prediction = img_class[0]
classname = img_class[0]
print("Class: ",classname)
文件保存为1_1.py,放在新建的文件夹里。
这个文件名可以取别的,但是存放位置一定要正确——cd XXXX文件夹里
③识别自己的的图片
import keras
from keras.datasets import mnist
from keras.layers import Dense
from keras.models import Sequential
from keras.optimizers import SGD
import matplotlib.pyplot as plt
from keras.preprocessing import image
(train_x, train_y) , (test_x, test_y) = mnist.load_data()
train_x = train_x.reshape(60000,784)
test_x = test_x.reshape(10000,784)
train_y = keras.utils.to_categorical(train_y,10)
test_y = keras.utils.to_categorical(test_y,10)
model = Sequential()
model.add(Dense(units=128,activation="relu",input_shape=(784,)))
model.add(Dense(units=128,activation="relu"))
model.add(Dense(units=128,activation="relu"))
model.add(Dense(units=10,activation="softmax"))
model.compile(optimizer=SGD(0.001),loss="categorical_crossentropy",metrics=["accuracy"])
model.load_weights("mini.h5")
#自己的图片
img = image.load_img(path="0_0.png",color_mode='grayscale',target_size=(28,28,1))
img = image.img_to_array(img)
test_img = img.reshape((1,784))
img_class = model.predict_classes(test_img)
prediction = img_class[0]
classname = img_class[0]
print("Class: ",classname)
img = img.reshape((28,28))
plt.imshow(img,cmap='gray')
plt.title(classname)
plt.savefig('10.jpg')
文件保存为1_2.py,放在新建的文件夹里。
这个文件名可以取别的,但是存放位置一定要正确——cd XXXX文件夹里
打开PS→新建→28X28

放大写一个数字
图片保存为png格式,0_0.png,注意保存位置为文件夹位置



(6)运行代码
python XX.py

代码修改:


代码参考:
https://www.zhihu.com/question/51767944/answer/930984307?utm_source=wechat_session