CNN 的常见问题分析和解决方法

记下 CNN 中 troubleshooting 的常用方法,原文见于链接

分析之前

  • 使用合适的日志和易于理解变量名
    在 tensorflow 中,可以使用 tensorboard 来可视化计算图。
  • 确定网络连接正确
    保证网络之间的输入输出关系正确
  • 使用数据增强技术
    并不总是适用,常用方法有镜像,旋转,增噪。
  • 确保正则化操作不会一直损失函数中的其他因子
    关掉正则化操作,观察函数损失的数量级的顺序,适当的调整正则化操作的权重,确保正则化后函数损失增大
  • 尝试在一个小数据集上过拟合
  • 当在小数据集上过拟合后,寻找合适的学习率
  • 执行梯度检查

函数损失没有提高

  • 确保使用了合适的损失函数并且优化了正确的 tensor
    常用的损失函数可见链接
  • 使用正确的优化器
    常用的优化器可见链接
  • 确保训练的变量正在优化
    使用 tensorflow 的话,可能需要查看 tensorflow 的直方图,或者写一个脚本,计算出在不同训练时期的每个 tensor
  • 调整初始学习率,实现合适的学习率调度
  • 确保没有过拟合

变量没有在训练

  • 确保它被 tensorflow 当做训练变量
  • 确保没有梯度耗散
  • 确保 ReLus 在工作

梯度耗散/梯度爆炸

  • 使用数据增强技术
  • 实现 dropout 层
  • 增强规范化
  • 实现 Batch Normalization 层
  • 实现基于正确性的终止
  • 如果失败,使用一个更小的网络

其他

  • 使用加权损失函数
  • 改变网络的架构
  • 使用更为协调的模型
  • 将 max/average pooling 替换为 strided convolutions
  • 执行超参数的查询
  • 替换随机数种子
  • 如果不成功,需要更多的训练数据