def test_backprop_maxpool2d_gradients(self): pool_layer = layers.MaxPool2D( pool_size=(2, 2), strides=(1, 1), padding=PaddingMode.valid, maxpool_deeplift_mode=MaxPoolDeepLiftMode.gradient, data_format="channels_last") self.create_small_net_with_pool_layer(pool_layer, outputs_per_channel=9) self.dense_layer.update_task_index(task_index=0) func = compile_func([ self.input_layer.get_activation_vars(), self.input_layer.get_reference_vars() ], self.input_layer.get_mxts()) np.testing.assert_almost_equal( func([ self.backprop_test_inps, np.ones_like(self.backprop_test_inps) * self.reference_inps ]), np.array([[ np.array([[1, 0, 0, 0], [0, 0, 2, 0], [2, 1, 1, 0], [0, 0, 1, 1]]) * 2, np.array([[0, 0, 1, 1], [0, 1, 0, 0], [0, 2, 1, 0], [1, 0, 1, 1]]) * 3 ], [ np.array([[0, 0, 1, 1], [0, 1, 0, 0], [0, 2, 1, 0], [1, 0, 1, 1]]) * 2, np.array([[1, 0, 0, 0], [0, 0, 2, 0], [2, 1, 1, 0], [0, 0, 1, 1]]) * 3 ]]).transpose(0, 2, 3, 1))
def maxpool2d_conversion(config, name, verbose, maxpool_deeplift_mode, **kwargs): pool2d_kwargs = prep_pool2d_kwargs(config=config, name=name, verbose=verbose) return [ layers.MaxPool2D(maxpool_deeplift_mode=maxpool_deeplift_mode, **pool2d_kwargs) ]
def test_fprop_maxpool2d(self): pool_layer = layers.MaxPool2D( pool_size=(2, 2), strides=(1, 1), padding=PaddingMode.valid, maxpool_deeplift_mode=MaxPoolDeepLiftMode.gradient, data_format="channels_last") self.create_small_net_with_pool_layer(pool_layer, outputs_per_channel=9) func = compile_func([self.input_layer.get_activation_vars()], self.pool_layer.get_activation_vars()) np.testing.assert_almost_equal( func([self.reference_inps[0], self.reference_inps[0] - 1]), np.array([[[[1, 2, 3], [5, 5, 4], [6, 7, 8]], [[2, 3, 4], [6, 6, 5], [7, 8, 9]]], [[[0, 1, 2], [4, 4, 3], [5, 6, 7]], [[1, 2, 3], [5, 5, 4], [6, 7, 8]]]]).transpose(0, 2, 3, 1))