Conv 和 Pooling
对于类似卷积和池化的算子,我们知道算子的输出特征图大小依赖输入特征图、步长、kernel_size 和 padding 等变量。
如果 设置为 ,则输出特征图高和宽的计算公式分别为:
如果 pad_mode(对应 PyTorch 中的属性为 padding,与属性 pad_mode 含义并不相同) 设置为 时,有时需要对输入特征图进行自动的 padding 操作,当padding 的元素为偶数时,padding 的元素会均匀分布在特征图的上下左右,此时 MindSpore、PyTorch 和 TensorFlow 中该类算子行为一致。
但当 padding 的元素为奇数时,PyTorch 会优先填充在输入特征图的左侧和上侧:
而 MindSpore 和 TensorFlow 则优先填充在特征图的右侧和下侧:
举例说明:
在做 MindSpore 模型迁移时,如果模型加载了 PyTorch 的预训练模型,而之后又在 MindSpore 进行 finetune,则该差异可能会导致精度下降,对于 padding 策略为 same 的卷积,开发者需要特别注意。