具体代码和文本见我上传的资源:CNN和rf两种实现
提交次数:3 次运行环境:
python 版 本 :3.7.4 tenserflow 版本:2.0.0 numpy 版本:1.17.4
使用两层卷积网络,在轮数不断连续增加但是准确率不增时停止。
定义交叉熵为损失函数,最小化交叉熵
准确率计算:
模型创建过程中需要创建权重和偏置项,权重在初始化时应该加入少量的噪声来打破对称性 以及避免 0 梯度。可以用较小的正数来初始化偏置项,以避免神经元节点输出恒为 0 的问题。为了不在建立模型的时候反复做初始化操作,我们定义两个函数用于初始化。举例:第一次卷积初 始化权重,输出 32 个通道
将数据集分成多个 batch,分批依次训练
训练:
数据增强:为了减少过拟合,在输出层之前加入 dropout。用 placeholder 来代表一个神经元的输出在 dropout 中保持不变的概率。加入 dropout 防止过拟合
命令行运行 digit.py 将结果存到 res.csv 中。将结果按照网站要求排版并提交,两次结果如下:
准确率:97.314%
可以看得出来绝大多数预测都正确,而预测错误的图片,多是因为图片具有迷惑性,即 使肉眼分辨也有可能识别错误。
- 结果分析与思考
提交三次,最佳结果准确率:97.314%。
使用全连接神经网络处理图像存在全连接层的参数太多的问题,参数增多除了导致计算速度 减慢,还很容易导致过拟合的问题,过拟合也是使用随机森林算法常见的一种错误。随机森林和 全链接神经网络无法很好地处理好图像数据,然而 CNN 却很好地克服了这些缺点。所以需要一个合理的神经网络结构来有效的减少神经网络中参数的个数,卷积神经网络就可以更好的达到这个 目的,原因就在于 CNN 在图像视觉处理上有着独特的优点,主要在于局部感知的应用适合处理图像的局部特征。