1. 神经网络训练并不是一个十全十美的抽象
据称,训练神经网络很容易上手。许多库和框架都以显示30行奇迹片段来解决您的数据问题为荣,给人以假的印象,即这些东西是即插即用的。
>>> your_data = # plug your awesome dataset here
>>> model = SuperCrossValidator(SuperDuper.fit, your_data, ResNet50, SGDOptimizer)
# conquer world here
比如说,以上代码给人一种假象,即只通过一行代码就可以完成对神经网络的训练。但事实上神经网络的训练是一件很复杂的事情。如果您坚持使用该技术而不了解其工作原理,则很可能会失败。
2. 神经网络的训练不知道怎么的就失败了
当你错误配置代码时,通常会遇到某种异常:插入了一个整数,该整数应为字符串;该函数仅需要3个参数;导入失败;该密钥不存在;两个列表中的元素数量不相等。此外,通常可以为某些功能创建单元测试。
这只是训练神经网络的开始。可能在语法上,所有内容都是正确的,但还是会训练失败,而且也很难看出来到底哪里错了。例如,也许在数据增强过程中左右翻转图像时忘记了翻转标签。网络仍然可以工作良好,因为网络可以在内部学习检测翻转的图像,然后左右翻转预测;也许由于一个错误,自回归模型意外地将它试图预测的东西作为输入;或者,尝试修剪渐变,但修剪了损失,导致在训练过程中忽略了异常示例;或者,从预先训练的检查点初始化了权重,但未使用原始均值;或者,只是搞砸了正则化强度,学习率,其衰减率,模型大小等设置。在大多数情况下,它会训练,但默默地工作会更糟。
训练神经网络的快速而暴力的方法行不通,这往往会令人感到难受。事实上,使得神经网络正常工作本身就是一件比较困难的事情,可以通过缜密的思考,提高警惕,利用可视化帮助我们训练神经网络。
延伸阅读:
- 书籍:《深度实践OCR:基于深度学习的文字识别》
- 作者:刘树春 阿里巴巴本地生活研究院算法专家,前复旦七牛云联合实验室OCR算法负责人