卷积神经网络实现手写数字识别

import tensorflow as tf
from tensorflow.keras import datasets ,layers ,models
import matplotlib.pyplot as plt

#导入数据
(train_images,train_labels),(test_images,test_labels) = datasets.mnist.load_data()

#归一化处理
train_images,test_images = train_images/255.0,test_images/255.0

#可视化图片
plt.figure(figsize=(20,10))
for i in range(20):
    plt.subplot(5,10,i+1)
    plt.xticks([])
    plt.yticks([])
    plt.grid(False)
    plt.imshow(train_images[i],cmap=plt.cm.binary)
    plt.xlabel(train_labels[i])
plt.show()

#调整图片格式,其中60000和10000是在tensorflow.keras.datasets.mnist中就已经确定好的
train_images = train_images.reshape((60000,28,28,1))
test_images = test_images.reshape((10000,28,28,1))

train_images,test_images = train_images/255.0,test_images/255.0

#构建CNN网络模型
model = models.Sequential([
    layers.Conv2D(32,(3,3),activation='relu',input_shape=(28,28,1)),
    layers.MaxPooling2D((2,2)),
    layers.Conv2D(64,(3,3),activation='relu'),
    layers.MaxPooling2D((2,2)),

    layers.Flatten(), 
    layers.Dense(64,activation='relu'), 
    layers.Dense(10)
])
#打印网络结构
model.summary()

#编译模型
model.compile(optimizer='adam',
              loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True), 
              metrics=['accuracy'])

#训练模型
"""
    这里设置输入训练数据集(图片以及标签)、验证数据集(图片以及标签)以及迭代次数epochs
    关于model.flt()函数的具体介绍可以查一查资料
"""
history = model.fit(train_images,train_labels,epochs=10, 
                    validation_data=(test_images,test_labels))

#使用模型进行预测
plt.imshow(test_images[1])
pre = model.predict(test_images)
pre[1]

 

posted @ 2022-11-07 21:55  山海自有归期  阅读(66)  评论(0编辑  收藏  举报