import numpy as np
import megengine.module.normalization as norm
from megengine import tensor
def shape_to_tuple(shape):
if isinstance(shape, tensor):
shape = tuple(shape.tolist())
return shape
def test_group_norm():
input_shape = (2, 100, 128, 128)
channels = input_shape[1]
groups = [2, 5, 10, 50]
x = tensor(np.random.rand(*input_shape))
for group in groups:
gn = norm.GroupNorm(group, channels)
out = gn(x)
assert shape_to_tuple(out.shape) == input_shape
def test_layer_norm():
input_shape_list = [(2, 3, 10, 10), (2, 2, 3, 10, 10)]
ln = norm.LayerNorm((10, 10))
for input_shape in input_shape_list:
x = tensor(np.random.rand(*input_shape))
out = ln(x)
assert shape_to_tuple(out.shape) == input_shape
def test_instance_norm():
input_shape = (2, 100, 128, 128)
channels = input_shape[1]
x = tensor(np.random.rand(*input_shape))
inst_norm = norm.InstanceNorm(channels)
out = inst_norm(x)
assert shape_to_tuple(out.shape) == input_shape