1.对于任何用到shape,size
返回值的参数时,例如:tensor.view(tensor.size(0),-1)
这类操作,避免直接使用tensor.size
的返回值,而是加上int转换,tensor.view(int(tensor.size(0)),-1)
2.对于nn.Upsample
或nn.functional.interpolate
函数,使用scale_factor
指定倍率,而不是使用size
参数指定大小
3.对于reshape、view
操作时候,-1
指定请放在batch
维度。其他维度可以计算出来即可。batch
维度禁止指定为大于-1
的明确数字
4.torch.onnx.export
指定dynamic_axes
参数,并且只指定batch
维度。我们只需要动态batch
,相对动态的宽高有其他方案
5.使用opset_version=11
,不要低于11
6.掌握了这些,就可以保证后面各种情况的顺利了
这些做法的必要性体现在,简化过程的复杂度,去掉gather、shape
类的节点,很多时候,部分不这么改看似也是可以但是需求复杂后,依旧存在各类问题。按照说的这么做,基本可以。