前言
在毕设系列推文的第二章中我们详细介绍了TensorFlow的一些基础知识(TensorFlow 2.0 概述);在第三章(毕业设计之「神经网络与深度学习概述」 (一)、毕业设计之「神经网络与深度学习概述」(二))中对神经网络与深度学习做了简单的概述(主要介绍本章节中完成两个项目所用的一些基础概念)包括激活函数、梯度下降、损失函数、softmax算法等;并且通过简单描述全连接神经网络的不足,详细介绍了卷积神经网络的相关概念。
有了前面几章的基础知识,在本章中,我们会在此基础上介绍两个相关的例子(在此之前会对4.1节中对所用卷积神经网络AlexNet进行详尽的描述):其中包括利用AlexNet完成MNIST手写字的训练和识别(本文所涉及内容)以及毕业设计之「测试实验及结果分析」(二)。
第一个例子是论文中要求指定完成的例子;第二个例子是为了丰富论文成果通过Python爬虫技术收集数据样本集(包括测试集图片和训练集图片,共计3762张图片)、通过搭建AlexNet标准网络结构模型进行训练,并通过测试集图片进行最终结果分析而特别引入的。
图解AlexNet网络结构
MNIST手写字训练和识别
import TensorFlow as tf mnist = tf.keras.datasets.mnist (x_train, y_train),(x_test, y_test) = mnist.load_data() x_train, x_test = x_train.reshape(-1,28,28,1) / 255.0, x_test.reshape(-1,28,28,1) / 255.0 # 毕业设计参数要求:卷积层3层、池化层3层、Relu3层,全连接层1层,连接单元数1024 model = tf.keras.models.Sequential([ tf.keras.layers.Conv2D(input_shape = (28,28,1),filters = 32,kernel_size = 5,strides = 1,padding = "same",activation = "relu"), # 28*28 tf.keras.layers.MaxPool2D(pool_size = 2,strides = 2,padding = 'same'), # 14*14 tf.keras.layers.Conv2D(64,5,strides=1,padding='same',activation='relu'), # 14*14 tf.keras.layers.MaxPool2D(2,2,'same'), # 7*7 tf.keras.layers.Conv2D(64,5,strides=1,padding='same',activation='relu'), # 7*7 tf.keras.layers.MaxPool2D(2,2,'same'), # 3*3 tf.keras.layers.Flatten(), # 64*3*3 tf.keras.layers.Dense(1024,activation='relu'), tf.keras.layers.Dropout(0.5), tf.keras.layers.Dense(10,activation = 'softmax'), ]) model.compile(optimizer='adam', loss='sparse_categorical_crossentropy',metrics=['accuracy']) model.fit(x_train, y_train, batch_size=32,epochs=5)
图4.11 卷积神经网络模型图
4.12 识别率展示图