1.前言
这里结合了我们的经验以及网上提供的一些资源,总结了在定位卷积神经网络系统问题时的一些方法。我们主要聚焦在利用深度神经网络实现的有监督学习。这里的实现默认是Python3.6 Tensorflow(TF)。
假设我们利用一个卷积神经网络来训练模型,然后评估的结果达不到我们的预期,下面的步骤将是定位问题和逐步提升我们模型的方法思想。首先先总结下在开始故障排除之前必须要做的事情,这些故障问题将按照常见程度进行排序,我们优先一起看看最常见的故障问题。
2. 在排查故障之前
下面是你在coding你的深度学习算法时的最佳实践。
1. 选择适合的日志和变量名称:在tensorflow中,你可以根据名字取跟踪不同的变量,并且在Tensorboard中可视化出来。最重要的是,每一步都保证你在跟踪相关参数,比如:step_number, accuracy, loss,learning_rate 等,以及更加专业的衡量指标(比如分词任务里的mean_intersection_over_union aka mean_iou 等)。
2. 保证你的网络是链路正确的:利用Tensorboard和其他 debugging 技术来保证你的计算图里每一个操作都有正确的输入和输出。并且要保证把训练数据和标签输入神经网络之前,要对数据做充分的预处理。
3. 运用数据增强技术:这个不常用,但是如果你是在处理图片的问题时,你将会看到当你运用数据增强技术时,比如:镜像,旋转,随机截取,缩放,添加噪声和弹性变形等,计算结果是会得到很大的提升的。TF直接提供了这些操作的API。
4. 对所有层运用权重初始化和正则化技术:避免将权重初始化为一样的值,更糟糕的是都初始化为0。如果这样做将会引入对称性和潜在梯度消失等问题,有可能会引入更糟糕的问题。一般而言,当你在权重初始化有困难时,就可以在你的网络层中应用Batch Normalization。
5. 确保正则化项不超过损失函数中的其