模型选择
我们训练了多个模型,总的有两大类,前面介绍了,这两种的不同之处主要是decoder的不同。一种是string类型的解码器;另一种是tree类型的解码器。两种模型有各自的优缺点,以下均是通过实验得到:
stringDecoder
- 优点:相比于treeDecoder,符号的预测准确度高,高达89.96%。我们通过分析测试的结果和生成的latex序列,我们认为,在训练集足够大的话,如果所预测公式的结构在以及latex序列的长度出现过的话,排除一些模糊符号,比如o和0,x和X的差距,预测结果是可以保证正确的。
- 缺点:模型参数过多,加载模型时间较长,对非批量处理的用户来说,可能不够友好。
treeDecoder
- 优点: 模型参数少,加载模型快,预测快。模型泛化能力强,因为是树形解码器,对于关系的预测,当上一次的子节点作为下一次的父节点预测时,仍然按照上一次的步骤进行。所以即使训练时模型latex数据较短时,预测较长的latex序列仍然可以。
- 缺点:相比于stringDecoder,其符号预测的准确度稍微低一点,有86.07%,仅仅低了一点。
是否使用gpu
由于二者正确率相差不多,鉴于我们训练集有限,treeDecoder的泛化能力更强并且latex预测较快,我们选择使用treeDecoder模型。接下来就是选择是否使用gpu来预测:
通过测试发现,如果每次仅预测一张图片,cpu速度更快,可以在1秒内完成预测,而使用gpu,需要将模型放到gpu上,这所花费的时间已经超出cpu处理完一张图片的时间。但是对于一次处理大量图片,使用gpu的时间要比使用cpu快的多。这里考虑到我们的项目前端用户只会进行单张图片识别,所以我们仅使用cpu。