一、概念
- 静态Shape:指在网络执行阶段Tensor的shape没有发生变化;
- 动态Shape:指在网络执行阶段Tensor的shape发生变化。
二、动态shape引起的原因
- 输入shape不固定;
- 网络执行过程中有引发shape变化的API;
- 控制流不同分支引入shape上的变化。
三、规避策略
- 可以在输入数据上加pad,pad到固定的shape。如deep_speechv2的数据处理 规定input_length的最大长度,短的补0,长的随机截断,但是注意这种方法可能会影响训练的精度,需要平衡训练精度和训练性能;
- 可以设置一组固定的输入shape,将输入分别处理成几个固定的尺度。如YOLOv3_darknet53的数据处理,在batch方法加处理函数multi_scale_trans,在其中MultiScaleTrans中随机选取一个shape进行处理;
- 构造mask来过滤掉无效的位置的值。