开发语言 : python 3.6.13
使用框架 :TensorFlow 2.5.0 + Keras 2.5.0
开发工具 :PyCharm 2020.2.2 x64
此次复现的主要代码文件有:
-
simpleDemo.py
参考了书目《Python深度学习》,是一个最简单的数字识别。
从Kears的datasets中导入mnist, 并使用简单的隐藏层进行训练。
-
complexDemo.py
添加多层神经网络的较复杂数字之别。
从Keras的datasets中导入mnist,并使用带有均值池化的卷积神经网络方法训练。
-
finalDemo.py
最终的数字识别。
为了验证算法的可行性以及最终的正确性,这里采用了Kaggle比赛中Digit Recognizer题目所提供的的mnist测试集test.csv和训练集train.csv, 并采用带有最大池化的卷积神经网络,以及避免过拟合的方法进行训练。
-
input文件夹
存放从finalDemo中读取的文件,训练集train.csv和测试集test.csv。
-
output文件夹
存放finalDemo.py最终生成的csv文件。
首先需要将二维的数据一维化
-
simpleDemo.py
最简单的程序
- 搭建神经网络
- 算法分析
(1)使用Sequential()函数作为模型。
(2)建立一个有15个神经元,并采用relu函数作为激活函数的全连接层。这里不使用其他函数的原因为防止梯度弥散。
(3)建立一个有10个神经元,并采用softmax函数作为激活函数的一个输入层。
-
complexDemo.py
稍复杂的程序
- 搭建神经网络
- 算法分析
使用卷积神经网络进行训练
(1)添加三个卷积层
(2)每个卷积层之间添加了一个均值池化。
(3)添加一个Flatten层,用于由卷积层向全连接层过渡。
(4)最后添加一个全连接层
-
finalDemo.py
最终程序
- 搭建神经网络
- 算法分析
同样使用卷积神经网络进行训练
(1)添加四个卷积层
(2)采用两个最大池化层
(3)添加Dropout层防止过拟合
(4)添加Flatten层,用于由卷积层向全连接层过渡。
(5)添加了梯度下降优化器。
epochs=50
三个Demo均采用50个回合进行训练
test_loss, test_accuracy = network.evaluate(test_images, test_labels)
print("test_loss:", test_loss, " test_accuracy:", test_accuracy)
采用network.evaluate()评估函数输出 测试集损失和测试集准确率,训练集损失以及训练集准确率。