def test_pixelshuffle2d(): nchan = 2 up_x = 2 up_y = 3 nx = 2 ny = 3 shape_before = (1, nchan * up_x * up_y, nx, ny) shape_after = (1, nchan, nx * up_x, ny * up_y) layer = nn.PixelShuffle2D((up_x, up_y)) x = mx.np.reshape(mx.np.arange(_np.prod(shape_before)), shape_before) y = layer(x) assert y.shape == shape_after # - Channels are reshaped to form 2x3 blocks # - Within each block, the increment is `nx * ny` when increasing the column # index by 1 # - Increasing the block index adds an offset of 1 # - Increasing the channel index adds an offset of `nx * up_x * ny * up_y` assert_allclose( y, [[[[ 0, 6, 12, 1, 7, 13, 2, 8, 14], [18, 24, 30, 19, 25, 31, 20, 26, 32], [ 3, 9, 15, 4, 10, 16, 5, 11, 17], [21, 27, 33, 22, 28, 34, 23, 29, 35]], [[36, 42, 48, 37, 43, 49, 38, 44, 50], [54, 60, 66, 55, 61, 67, 56, 62, 68], [39, 45, 51, 40, 46, 52, 41, 47, 53], [57, 63, 69, 58, 64, 70, 59, 65, 71]]]] )
def __init__(self, upscale_factor): super(SuperResolutionNet, self).__init__() self.conv1 = nn.Conv2D(64, (5, 5), strides=(1, 1), padding=(2, 2), activation='relu') self.conv2 = nn.Conv2D(64, (3, 3), strides=(1, 1), padding=(1, 1), activation='relu') self.conv3 = nn.Conv2D(32, (3, 3), strides=(1, 1), padding=(1, 1), activation='relu') self.conv4 = nn.Conv2D(upscale_factor ** 2, (3, 3), strides=(1, 1), padding=(1, 1)) self.pxshuf = nn.PixelShuffle2D(upscale_factor)