基于 Mnisi 数据集的卷积神经网络训练过程
1. 网络各层(卷积、池化、dropout、batch normalization 等)
Mnist 数据集比较基础容易分辨,所以采用了两层卷积层和两层池化层交
替进行的结构,最后加入两层全连接层,中间插入一个 dropout 层,keep_prob
参数我尝试过 0.5,0.6,0.7,0.8,0.9,最后发现这个值居然也不是越大越好,开始
是用着 0.5 去调了一些其他参数,发现在我调整的范围内,基本准确率只能
到 0.97 多一点,但后来随着我调高这个参数值,调至 0.8 时,其他参数不变
的情况下,准确率已可以初步上到 0.98,但是设为 0.9,准确率反而有所下降
了,我猜想可能是保留的神经元多,发生了一些过拟合。所以最后采用了 0.8
在每个卷积层上,我又加入了 batch normalization 的操作,希望可以加
快收敛速度,在查询了 tf.contrib.slim.conv2d()函数的参数列表后发现,它
的参数里就可以直接设置 BN 的标准化器和相关参数,在 BN 自己的参数里,
我主要调整了一个’decay’的参数,它是用于衡量指数衰减函数更新均值和方
差的速度,一般取值范围是在 0.9、0.99、0.999 之间,三个我都尝试过之后,
发现 0.99 有最好的准确率,而 0.9 会使模型的性能降低不少。最后加入 BN
操作之后,的确惊喜的发现,收敛速度变得更快了,在 500 个 step 左右,准
确率即可上升至 0.97~0.98。
2. 激活函数
我尝试了 sigmoid、tanh、relu 这三种激活函数,应用于卷积以及全连接
层,仍然是和上周作业一样,relu 激活函数可以在相同的 steps 数内,有更快
- 1
- 2
- 3
- 4
- 5
- 6
前往页