深度学习技巧统计--tensorflow

xiaoxiao2025-04-20  22

        1.使用ADAM优化器,搭配ReLU激活函数。

        2.使用方差缩放初始化。在Tensorflow中,该方法写作tf.contrib.layers.variance_scaling_initializer()。这种初始化方法比常规高斯分布初始化、截断高斯分布初始化及Xavier初始化的泛化/缩放性能更好。粗略地说,方差缩放初始化根据每一层输入或输出的数量来调整初始随机权重的方差,从而帮助信号在不需要其他技巧(如梯度裁剪或批归一化)的情况下在网络中更深入地传播。Xavier和方差缩放初始化类似,只不过Xavier中每一层的方差几乎是相同的;但是如果网络的各层之间规模差别很大(常见于神经网络)。则这些网络并不能很好地处理每一层中相同的方差。

        3.白化(归一化)输入数据。简单说,样本点减去均值,再除以其标准差。或者也可以以合理地保留动态范围的方式对输入数据进行缩放,例如log()和tan()。

        4.一般不要使用学习率衰减,在随机梯度下降中,降低学习率是很常见的,但是ADAM天然地就考虑到了这个问题。

        5.如果卷积层有64或128个滤波器,这就已经足够了。如果已经拥有了大量的滤波器,那么再添加更多的滤波器可能并不会提升性能。池化是为了变换不变性。池化本质是让网络学习到图像莫个部分的一般概念。例如,最大池化能够帮助卷积网络对图像中特征的平移、旋转和缩放具备一定的鲁棒性。

6.卷积层是CNN网络的核心,激活函数帮助网络获得非线性特征,而池化的作用则体现在降采样:保留显著特征、降低特征维度,增大kernel的感受野。深度网络越往后面越能捕捉到物体的语义信息,这种语义信息是建立在较大的感受野基础上。

7.全局池化层取代全连接层。全连接层的缺点:参数量过大,且参数过大容易导致过拟合。全局池化就是池化的滑窗size和整张feature map的size一样大。这样,每个 W×H×CW×H×C 的feature map输入就会被转化为 1×1×C1×1×C 输出。因此,其实也等同于每个位置权重都为 1/(W×H)1/(W×H) 的FC层操作,等同于输入一个tensor,输出一根vector。

9.batch_norm(BN层)。为什么归一化?原因在于神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;另外一方面,一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度。对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。

在每一层输入的时候,再加个预处理操作,比如网络第三层输入数据把它归一化至:均值0、方差为1,然后再输入第三层计算。batch_norm就是在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理,然后再进入网络的下一层,但是这个归一化没有那么简单。

        神经网络的调试

         1.降低学习率,网络可能会学习地更慢,但是它可能会找到一个之前使用较大的步长时没找到的最小值。使用ADAM优化器时,认为在许多实验场景下,0.001是比较好的学习率。

        2.减小(小)批量处理的规模。将批处理大小减小到1可以向你提供与权重更新相关的更细粒度的反馈,可以在tensorboard中展示出来。

        3.删掉批归一化层(BN层),当遇到好长时间都没有收敛的网络时,可以进行尝试下。

转载请注明原文地址: https://www.6miu.com/read-5028741.html

最新回复(0)