Source code for megengine.amp.convert_format
from copy import deepcopy
from .. import functional as F
from ..core import _config
from ..module import Module
from ..tensor import Tensor
def _is_nchw_format(param: Tensor):
# TODO: use better condition
return (param.ndim == 4 or param.ndim == 5) and param.format != "nhwc"
[docs]def convert_tensor_format(x: Tensor, inplace: bool = True):
"""Convert NCHW Tensor to NHWC Tensor."""
if not _is_nchw_format(x):
return x
if x.ndim != 4 and x.ndim != 5:
raise ValueError("Unsupport tensor ndim {}".format(x.ndim))
if x.format != "nhwc":
# hostvalue should still be valid, so no d2h cost.
data = x.numpy()
if inplace:
# reset will destroy existed backward grad
x[...] = Tensor(data, format="nhwc")
else:
# use mge interface to maintain grad
x = Tensor(data, format="nhwc")
return x
[docs]def convert_module_format(module: Module, inplace: bool = True):
"""Convert NCHW Module to NHWC Module."""
if not inplace:
module = deepcopy(module)
for name, param in module.named_tensors():
convert_tensor_format(param, inplace=True)
return module