若模型可处理大小变化的输入,那如何训练和预测?
蓝海大脑深度学习高性能计算液冷事业部研究人员表示:
以RNN为例,虽然它可以处理各种长度的序列,但是我们在训练时,为了加速训练,往往会将一批数据同时输入到模型中进行计算、求导。那同一批数据,要喂给网络,我们必须把它组织成矩阵的形式,那矩阵的每一行/列自然维度需要相同。所以我们必须让同一个batch中的各个样本长度/大小一致。
最常用的方法,就是padding,我们通过padding补零,把同一个batch中的所有样本都变成同一个长度,这样就可以方便我们进行批量计算了。对于那些padded values,也就是补的零,我们可以使用masking机制来避免模型对这些值进行训练。
实际上,有研究指出,我们可以对一批样本(以NLP为例),做一个长度的排序,然后分组,每一组使用不同的max length超参数,这样可以节省padding的使用次数,从而提高训练效率(论文我不知道是哪个,听别人说的,知道的同学可以告诉我),文后的连接里,我找到了一个keras的示例代码,可供参考。
当然,如果我们设置batch size=1,那就不需要padding了,就可以开心的把各种不同长度的数据都丢进去训练了。
在预测时,如果我们想进行批量预测,那也是必须通过padding来补齐,而如果是单条的预测,我们则可以使用各种长度。
蓝海大脑 京ICP备18017748号-1