作业八:输入校验与特殊公式识别
项目 | 内容 |
---|---|
这个作业属于的课程 | 人工智能实战2019(北京航空航天大学) |
这个作业的要求 | 人工智能实战第八次作业(个人) |
我在这个课程的目标是 | 学习算法,积累项目经验,锻炼coding能力 |
这个作业在哪个具体方面帮助我实现目标 | 手写数据集公式识别 |
作业正文 | 见下文 |
其他参考文献 | 无 |
作业描述
思考题 1:如何识别不合法(既非数字又非符号)的输入?
思考题 2:如何设计该计算器应用以识别下列元素:
A. 更多的符号,比如sin函数
B. 复杂的表达式结构(上下结构),比如指数 \(e^x\)
C. 更复杂的表达式结构(包围结构),比如平方根 \(\sqrt{a^2+b^2}\)
识别不合法的输入
合法的输入包括输入数字和符号。校验输入即为允许数字和符号形式的输入进入手写数据集分类神经网络。为了达到这一目的,经思考有以下两种策略:
- 将所有输入都投入神经网络,根据分类结果来判断是否为合法输入。若所有合法分类的输入都低于阈值,则判断为不合法。
- 优点:模型简单,无需额外设计网络;复用已经训练得的参数,节省训练的计算量和内存。
- 缺点:1)每次判断输入是否合法都要经历一整个网络,效率低。对于不合法的输入白白浪费计算量。2)用softmax回归后的值已经历归一化,各类得分总和为1,一旦不合法输入长得有一点“像”合法输入,该错误分类就会被softmax拔高得分,导致结果错误。
- 在原神经网络前添加校验神经网络。校验神经网络的目的是对输入做二分类:合法vs不合法。
- 优点:1)提前阻止不合法输入进入神经网络,提高真正合法的输入的训练/测试效率。2)输入校验与数字分类逻辑独立,互不影响,思路清晰。
- 缺点:需要额外的神经网络辅助,增加模型复杂度,增加训练时的计算量。
公式识别
- 识别指数
幂次、下标的识别可通过与正常数字高度的相对位置来判断。如,算出合法输入公式的所有字符平均高度和中心偏移绝对距离均值\(\mu\)。对于单个字符,若其中心位置偏移距离高/低于\(\alpha\mu\) (\(\alpha\)是参数),则认为它是幂次/下标。 - 识别sin
将sin, cos, tan这样的字母组合公式记忆下来,即每k个字符作为一个滚动窗口,分别组合,与记忆库中固定组合比对匹配(模拟神经网络的思路)。 - 识别\(\sqrt{a^2+b^2}\)
利用平方根左侧的勾作为检测特征,检测后续字符的顶部图像。添加识别顶部横线的卷积核。