使用tensorflow2.x训练手写数字识别模型与数据测试

1.导包 

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense,Dropout,Convolution2D,MaxPooling2D,Flatten
from tensorflow.keras.optimizers import Adam

2.数据处理

#载入minist数据集
mnist =tf.keras.datasets.mnist
#将数据划分为训练集和测试集
(x_train,y_train),(x_test,y_test)=mnist.load_data()
#tensorflow中独有的功能是再做卷积时,需要把数据处理成为4维的格式才能计算
x_train =x_train.reshape(-1,28,28,1)/255.0
x_test =x_test.reshape(-1,28,28,1)/255.0
#将标签转换为独热码
y_train =tf.keras.utils.to_categorical(y_train,num_classes=10)
y_test = tf.keras.utils.to_categorical(y_test,num_classes=10)

3 数据查看

plt.imshow(x_train[17],cmap='gray')
plt.axis('off')
plt.show()

 此为运行结果:

使用tensorflow2.x训练手写数字识别模型与数据测试_第1张图片

4 模型训练

#模型搭建
model =Sequential()
#filters滤波器个数32,生成32张特征图
#kernel_size 卷积窗口大小5×5
#strides 步长1
#padding方式为same
#使用relu的激活函数
#1.搭建第一个卷积层
model.add(Convolution2D(
    input_shape=(28,28,1),
    filters =32,
    kernel_size = 5,
    strides = 1,
    padding='same',
    activation='relu'
))
#2.搭建第一个池化层
model.add(MaxPooling2D(
    pool_size=2,
    strides=2,
    padding='same'
))
#搭建第二个卷积层
model.add(Convolution2D(
    filters=64,
    kernel_size=5,
    strides=1,
    padding='same',
    activation='relu'  
))
#2.搭建第二个池化层
model.add(MaxPooling2D(2,2,'same'))
#把第二个池化层输出进行数据扁平化
#相当于把(64,7,7,64)数据->(64,7*7*64)
model.add(Flatten())
#第一个全连接层
model.add(Dense(1024,activation='relu'))
model.add(Dropout(0.5))
#第二个全连接层
model.add(Dense(10,activation='softmax'))
#定义优化器
adam = Adam(1r=le-4)
#定义优化器,loss function,训练过程中计算准确率
model.compile(optimizer=adam,loss='categorical_crossentropy',metrics=['accuracy'])
#模型训练
model.fit(x_train,y_train,batch_size=64,epochs=10,validation_data=(x_test,y_test))
#保存模型
model.save('mnist_model.h5')

4. 数据测试

先在纸上手写一个数字,类似这样

使用tensorflow2.x训练手写数字识别模型与数据测试_第2张图片

打开此文件 

img=Image.open('5.jpg')
plt.imshow(img)
plt.axis('off')
plt.show()

将图片的大小变成28×28,并且把它从3D的彩色图转化为1D的灰度图

image =np.array(img.resize((28,28)).convert('L'))
plt.imshow(image,cmap='gray')
plt.axis('off')
plt.show()

使用tensorflow2.x训练手写数字识别模型与数据测试_第3张图片

 #将数字变化为黑底白字 通过把图片进行(255-image)得到

#通过将之除以255.0将之归一化

image=(255-image)/255.0
plt.imshow(image,cmap='gray')
plt.axis('off')
plt.show()

使用tensorflow2.x训练手写数字识别模型与数据测试_第4张图片

image=image.reshape((1,28,28,1))
model=load_model('mnist.h5')
predict_x=model.predict(image)
prediction=np.argmax(predict_x,axis=1)
print("模型识别的数字是:",prediction)

最后得到预测结果

你可能感兴趣的:(深度学习,tensorflow,深度学习,python)